【问题标题】:How do I label expression alternatives with same precedence level?如何标记具有相同优先级的表达式替代项?
【发布时间】:2013-12-19 16:36:42
【问题描述】:

使用 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 ,同时仍然让两个备选方案具有相同的优先级?

【问题讨论】:

    标签: antlr antlr4 operator-precedence


    【解决方案1】:

    恐怕不会。您可以使用 op=('+'|'-') 标记操作,然后在树遍历期间获取 ctx.op() 值并询问其令牌类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-18
      • 2010-09-09
      • 1970-01-01
      相关资源
      最近更新 更多