如何标记具有相同优先级的表达式替代项



使用 antlr4,我可以像这样标记规则替代方案:

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

据我了解,在上面的规则中,Mult 的优先级高于 Add,因为 Mult 在替代方案列表中排在 Add 之前。

例如,如果我写:

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

1 + 2 中的+4 - 2中的-具有相同的优先级。但是,现在替代方案不在顶级。有没有办法分别标记规则e '+' e # Adde '-' e #Sub,同时仍然让两个备选方案具有相同的优先级?

恐怕不是。你可以用op=('+'|'来标记op-'),然后在树上漫步期间获取 ctx.op() 值并询问其令牌类型。

相关内容

  • 没有找到相关文章

最新更新