private ArrayList<String> GetProductiveNonTerminals(ArrayList<String> i_productions)
    {
        ArrayList<String> res_array = new ArrayList<String>();
        for(Rule rule : m_rules)
        {
            boolean is_productive_rule = true;
            for(String str : rule.GetRightPart())
            {
                if(!i_productions.contains(str))
                {
                    is_productive_rule = false;
                    break;
                }
            }
            if(is_productive_rule)
                res_array.add(rule.GetLeftPart());
        }
        return res_array;
    }