ANTLR4语法中的集合当前不支持规则引用

Gau*_*tam 9 porting antlr3 antlr4

我正在尝试将Chris Lambro的ANTLR3Javascript语法移植到ANTLR4

我收到以下错误,

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

在以下代码中 ~(LT)*

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

LT  : '\n'      // Line feed.
    | '\r'      // Carriage return.
    | '\u2028'  // Line separator.
    | '\u2029'  // Paragraph separator.
    ;
Run Code Online (Sandbox Code Playgroud)

我需要帮助理解为什么我会收到此错误,以及如何解决它.

Sam*_*ell 9

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

LineComment
    :   '//' ~([\n\r\u2028\u2029])* -> skip
    ;
Run Code Online (Sandbox Code Playgroud)

  • 以前如果你有这样的规则引用,它仍然会生成一个词法分析器,但它创建的标记不正确.解决方案是将其转换为错误消息,而不是让它无声地失败. (5认同)