用于后缀整数运算的ANTLR4语法

时间:2018-02-12 20:26:50

标签: java parsing antlr4 context-free-grammar postfix-notation

非常新的ANTLR4并尝试为目标语言Forth创建表达式分析器。由于Forth使用后缀表示法,我正在尝试为后缀整数算法编写语法规则。

下面是中缀和后缀整数运算的语法,但是我写的后缀语法没有创建一个合适的解析树。

使用输入3 4 + 5 *进行测试

Parse tree it creates with input 3 4 + 5 *

所需/预期的解析树:

Desired/Expected parse Tree

任何人都可以帮我解决这个问题吗?感谢。

grammar ExpAnalyser;

//Parser : grammer

//Infix Arithmetic
/*eval : additionExp ;

additionExp : multiplyExp(PLUS multiplyExp | MINUS multiplyExp)* ;

multiplyExp : unaryExp(MULT unaryExp | DIV unaryExp)* ;

unaryExp :  MINUS atomExp | atomExp ;

atomExp :  NUMBER | LPAREN eval RPAREN ;*/

//Postfix Arithmetic
eval : operation ;

operation : atomExp(atomExp PLUS | atomExp MINUS | atomExp MULT | atomExp 
DIV | atomExp MOD)* ;

atomExp : NUMBER | NUMBER NUMBER eval ;


//Tokenizers : Lexers
MULT  : '*' ;
DIV   : '/' ;
MOD : 'mod' ;
PLUS  : '+' ;
MINUS : '-' ;

//gForth floating point arithmetic tokens
FMULT : 'f*' ;
FDIV : 'f/' ;
FPLUS : 'f+' ;
FMINUS : 'f-' ;

LPAREN : '(' ;
RPAREN : ')' ;

NUMBER : [0-9]+ ('e'[0-9]+)? ;

COMMENT : '//' .+? ('\n'|EOF) -> skip ;

WS : [ \t\r\n]+ -> skip ; // skip spaces, tabs, newlines

0 个答案:

没有答案