java - 导入使用不同模式的 ANTLR4 词法分析器语法

标签 java antlr4

我正在尝试将一个词法分析器语法导入另一个词法分析器语法。 导入的语法使用不同的模式(在 XMLLexer 示例模式 INSIDE 和 PROC_INSTR 中)。

lexer grammar HTMLLexer;
import XMLLexer;

编译时报错,没有定义模式名称对应的变量。

作为一个具体的例子,我在 XMLLexer 之上定义了一个 HTMLLexer(来自 antlr4 书) 并得到以下错误:

C:\Users\<user>\AppData\Local\Temp\TestRigTask-1360839400637\HTMLLexer.java:143: 
  error: cannot find symbol
  case 6: more(); pushMode(PROC_INSTR);  break;
                         ^
  symbol:   variable PROC_INSTR
  location: class HTMLLexer
1 error

我可以通过使用额外的标记重新定义顶级词法分析器中的模式来克服这个错误,但是其他模式中的导入标记(作为默认模式)无法识别。

如果我在主词法分析器定义中内联导入部分,解析器就会工作,但我想使用导入功能来进行清晰的分离。 (不适用于 xml/html 示例,但在另一种情况下。)

是否可以使用导入使其工作,还是 antlr4 的限制?

最佳答案

ANTLR 4暂不支持导入多模式词法分析器语法,以下issue将跟踪该功能的进展:

Support importing multi-mode lexer grammars

关于java - 导入使用不同模式的 ANTLR4 词法分析器语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14874689/

相关文章:

mysql - C# 用antlr4解析mysql,使用mysql-workbench语法

maven - ANTLR4生成的代码未编译: “cannot override reset()”

c++ - 遍历 ParseTree ANTLR4 的正确方法

java - fireTableStructureChanged 后如何在 JTable 中维护用户指定的表行排序?

java - 使用 Java 应用程序更改默认 Windows 语言

java - 无法运行 Mallet 主题模型

java - 从Map中获取平均值条目

c# - Antlr4 C# 应用程序教程/示例

antlr - 在从词法分析器中跳过 WS 时编写对空格敏感的解析器规则

java - 如何向长值添加数字