在ANTL4中匹配相同类型的多个表达式

时间:2015-02-09 17:54:37

标签: antlr antlr4

让我们说我们想要使用一个添加多个参数的函数,然后如何构建ANTLR4语法来一次收集和传递所有子表达式?

Bellow是用于说明要点的示例语法,请注意' +'的所有术语。收集并立即传递到表达式对比' *'递归评估。

enter image description here

grammar calc;

stats: exp*;

exp
    : INT ('+' INT)+
    | exp ('*' exp)+
    | INT
    ;

INT: [0-9]+;
WS: [ \n]+ -> skip;

注意:上面的语法欺骗是将INT置于' +'运算符(而不是表示为' *')。

这是一个 paintbrushed 图表(我认为)目标解析树对于表达式1*2+2*2+3*3的外观:

enter image description here

1 个答案:

答案 0 :(得分:0)

下面的语法应该(几乎)产生你绘制的解析树。这是管理n-ary运算符和优先级的一种相当常见的方式。

exp : add ;
add : mult ('+' mult)* ;
mult : term ('*' term)* ;
term : ( '(' exp ')' ) | INT ;

'希望这会有所帮助!