2013-12-19 24 views
1

随着antlr4我可以标注这样的规则选择:如何标记具有相同优先级别的表达式替代方法?

e : e '*' e # Mult 
    | e '+' e # Add 
    | INT # Int 
    ; 

据我了解,在上面的规则,MULT具有更高的优先级高于添加因为MULT到来之前添加替代品的清单。

因此,举例来说,如果我写的:

e : e '*'  e # Mult 
    | e ('+'|'-') e # Add 
    | INT # Int 
    ; 

4 - 21 + 2-+具有相同的优先级。 但是,现在替代方案不在顶层。有没有一种方法可以分别标记规则e '+' e # Adde '-' e #Sub,同时还有两个替代方案具有相同的优先级别?

回答

3

恐怕不是。你可以用op =('+'|' - ')标记op,然后在树行走过程中获取ctx.op()值并询问它的标记类型。

相关问题