我正在尝试将一个词法分析器语法导入另一个词法分析器语法。 导入的语法使用不同的模式(在 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将跟踪该功能的进展:
关于java - 导入使用不同模式的 ANTLR4 词法分析器语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14874689/