让我们说我们想要使用一个添加多个参数的函数,然后如何构建ANTLR4语法来一次收集和传递所有子表达式?
Bellow是用于说明要点的示例语法,请注意' +'的所有术语。收集并立即传递到表达式对比' *'递归评估。
grammar calc;
stats: exp*;
exp
: INT ('+' INT)+
| exp ('*' exp)+
| INT
;
INT: [0-9]+;
WS: [ \n]+ -> skip;
注意:上面的语法欺骗是将INT置于' +'运算符(而不是表示为' *')。
这是一个 paintbrushed 图表(我认为)目标解析树对于表达式1*2+2*2+3*3
的外观:
答案 0 :(得分:0)
下面的语法应该(几乎)产生你绘制的解析树。这是管理n-ary运算符和优先级的一种相当常见的方式。
exp : add ;
add : mult ('+' mult)* ;
mult : term ('*' term)* ;
term : ( '(' exp ')' ) | INT ;
'希望这会有所帮助!