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

标签 porting antlr3 antlr4

我正在尝试将Chris Lambro's ANTLR3 Javascript Grammar移植到ANTLR4
我收到以下错误,

Rule reference 'LT' is not currently supported in a set



在以下代码中~(LT)*
LineComment
    : '//'  ~(LT)* -> skip
    ;

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

我需要帮助,以了解为什么会出现此错误以及如何解决该错误。

最佳答案

ANTLR中的~运算符会反转一组符号(词法分析器中的字符或解析器中的 token )。在集合内部,您有对LT lexer规则的引用,而ANTLR 4当前不支持该规则。要解决此问题,您需要内嵌规则引用:

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

关于porting - ANTLR4语法集中的当前不支持规则引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16790861/

相关文章:

linux - Linux 中 `sysinfo.h` 的 Mac OS X 等效头文件

使用 ANTLR 3 解析由两个句点分隔的 float 和范围

java - GDL Antlr语法

java - ANTLR:错误恢复并不总是与最长匹配的上下文匹配

python - 将 Python2 文件派生类移植到 Python 3

android - 移植 Android 以在 ARM RealView Debugger 上运行

c++ - 构建遗留 Turbo C++ 代码

antlr - 如何获取 Antlr 解析器规则以从默认和隐藏 channel 读取

c - 使用 c 语法构建 ast 时管理操作优先级

ANTLR 不匹配输入 '<EOF>'