【问题标题】:Rule reference is not currently supported in a set in ANTLR4 GrammarANTLR4 语法中的集合当前不支持规则引用
【发布时间】:2013-05-28 11:24:31
【问题描述】:

我正在尝试将Chris Lambro's ANTLR3 Javascript Grammar 移植到ANTLR4

我收到以下错误,

集合中当前不支持规则引用“LT”

在下面的代码~(LT)*

LineComment
    : '//'  ~(LT)* -> skip
    ;

LT  : '\n'      // Line feed.
    | '\r'      // Carriage return.
    | '\u2028'  // Line separator.
    | '\u2029'  // Paragraph separator.
    ;

我需要帮助了解我收到此错误的原因以及如何解决它。

【问题讨论】:

  • 我也对 JS 的 antlr4 语法感兴趣。你走得很远吗?
  • 我有一个语法可以解析所有 JS 表达式、functionCalls 和 if-else 语句。如果可能的话,我会尝试开源语法

标签: porting antlr3 antlr4


【解决方案1】:

ANTLR 中的~ 运算符反转一组符号(词法分析器中的字符,或解析器中的标记)。在集合中,您有一个对 LT 词法分析器规则的引用,该规则目前在 ANTLR 4 中不受支持。要解决此问题,您需要内联规则引用:

LineComment
    :   '//' ~([\n\r\u2028\u2029])* -> skip
    ;

【讨论】:

  • 但是这被列为固定github.com/antlr/antlr4/issues/70,为什么我不能使用它?
  • 以前如果你有这样的规则引用,它仍然会生成一个词法分析器,但它创建的标记将不正确。解决方案是将其变成错误消息,而不是让它静默失败。
猜你喜欢
  • 2015-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-08
  • 1970-01-01
相关资源
最近更新 更多