Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java tools & IDE's > ANTLR


Автор: PovAnd 4.12.2007, 16:33
Может кто подкинет пример для ANTLR где присутствует отработка вложенности скобок в выражении (логическом или арифметическом по ходу без разницы).

Или как вариант, вот я составил правила для записи логических выражений вида:
 "op1" && "op2" || "op3" && !!!"op4"


--------------------------

grammar Parser;

UNIT        : '"'('a'..'z' | 'A'..'Z'| '0' .. '9' | ' ')*'"';


    
expression
    :    conditionalOrExpression
    ;
    
conditionalOrExpression
    :   conditionalAndExpression ( '||' conditionalAndExpression )*
    ;

conditionalAndExpression
    :   exclusiveOrExpression ( '&&' exclusiveOrExpression )*
    ;

exclusiveOrExpression
    :   unaryExpressionNot ( '^' unaryExpressionNot )*
    ;
    
unaryExpressionNot
    :   '!'* UNIT
    ;

--------------------------

Помогите доработать, чтобы данный парсер поддерживал возможность выражений вложенных в скобоки.

Автор: PovAnd 4.12.2007, 17:24
ну вроде дадумался, так вроде работает:
------

grammar Parser;

UNIT        : '"'('a'..'z' | 'A'..'Z'| '0' .. '9' | ' ')*'"';


    
expression
    :    conditionalOrExpression
    ;
    
conditionalOrExpression
    :   conditionalAndExpression ( '||' conditionalAndExpression )*
    ;

conditionalAndExpression
    :   exclusiveOrExpression ( '&&' exclusiveOrExpression )*
    ;

exclusiveOrExpression
    :   unaryExpressionNot ( '^' unaryExpressionNot )*
    ;    
    
unaryExpressionNot
    :    
    '!' unaryExpressionNot
    |   valueExpression
;

valueExpression
    :
    UNIT
    |  '(' conditionalOrExpression ')'
;

------

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)