Левая рекурсия JavaCC

Я пытаюсь удалить левую рекурсию для этой грамматики JavaCC. Я получаю ошибку, обнаруженную рекурсией Left, в минуту для условия, приведенной ниже, и я не могу понять, как ее исправить. Любая помощь будет принята с благодарностью:)

    void condition(): {}                                                            
    {
        <TILDA> condition() 
        | <LEFT_BRACKET> condition() <RIGHT_BRACKET>
        | expression() comp_op() expression()
        | condition() <LEFT_BRACKET> <OR> | <AND> <RIGHT_BRACKET> condition()
    }

    void comp_op() : {}                                                             
    {
        <EQUALS> | <NOT_EQUAL> | <LESS_THAN> | <LESS_THAN_OR_EQUAL> | 
         <GREATER_THAN> | <GREATER_THAN_OR_EQUAL>
    }

    void expression() : {}                                                      
    {
        fragment() binary_arith_op() fragment() 
        | <LEFT_BRACKET> expression() <RIGHT_BRACKET> 
        | <IDENTIFIER> <LEFT_BRACKET> arg_list() <RIGHT_BRACKET> 
        | fragment()
    }

0 ответов

Другие вопросы по тегам