Antlr4 导入组合语法失败 [英] Antlr4 import of combined grammar failing
问题描述
我现在正在……
error(56): AqlCommentTest.g4:12:4: 对未定义规则的引用:htmlCommentDeclaration错误(56):AqlCommentTest.g4:13:4:对未定义规则的引用:mdCommentDeclaration
词法分析器语法的导入似乎正在加载.以下文件存在问题.
AqlCommentTest.g4
grammar AqlCommentTest;导入 AqlLexerRules;导入 AqlComment;程序:commentDeclaration+;评论声明:htmlCommentDeclaration #Comment_HTML|mdCommentDeclaration #Comment_MD;
AqlComment.g4
grammar AqlComment;导入 AqlLexerRules;htmlCommentDeclaration: 'html' '{' '(*' STRING '*)' '}';mdCommentDeclaration: 'md' '{' '(*' STRING '*)' '}';
AqlLexerRules.g4
词法语法AqlLexerRules;字符串 : '"' [a-z]? '"' ;
可以通过删除import AqlLexerRules;"来停止错误来自AqlCommentTest.g4"文件.
为什么这可以解决"问题?
如何检查是否实际应用了 antlr4 导入语句以及如何应用?
如果导入词法规则排在最后:
import AqlComment;导入 AqlLexerRules;
错误变为:
error(54): AqlCommentTest.g4:4:0: 重复语法前传规范(选项、标记或导入);请合并
因此问题:导入是否有限制?
在 Definitive ANTLR 4 Reference 15.2 语法结构或doc 你可以找到:
<块引用>选项、导入和令牌规范中最多只能有一个.
如果我将导入更改为:
import AqlComment, AqlLexerRules;
它编译.</p>
I am presently getting...
error(56): AqlCommentTest.g4:12:4: reference to undefined rule: htmlCommentDeclaration
error(56): AqlCommentTest.g4:13:4: reference to undefined rule: mdCommentDeclaration
The import for the lexer grammar does seem to be loading. The following files present the problem.
AqlCommentTest.g4
grammar AqlCommentTest;
import AqlLexerRules;
import AqlComment;
program: commentDeclaration+;
commentDeclaration:
htmlCommentDeclaration #Comment_HTML
| mdCommentDeclaration #Comment_MD
;
AqlComment.g4
grammar AqlComment;
import AqlLexerRules;
htmlCommentDeclaration: 'html' '{' '(*' STRING '*)' '}';
mdCommentDeclaration: 'md' '{' '(*' STRING '*)' '}';
AqlLexerRules.g4
lexer grammar AqlLexerRules;
STRING : '"' [a-z]? '"' ;
The errors can be stopped by removing the 'import AqlLexerRules;' from the 'AqlCommentTest.g4' file.
Why does this "fix" the problem?
How can I check to see if and how an antlr4 import statement is actually applied?
If the import lexer rules comes last :
import AqlComment;
import AqlLexerRules;
the error changes to :
error(54): AqlCommentTest.g4:4:0: repeated grammar prequel spec (options, tokens, or import); please merge
Hence the question : is there a constraint about import ?
In the Definitive ANTLR 4 Reference 15.2 Grammar Structure or doc you can find :
There can be at most one each of options, imports, and token specifications.
If I change the import to :
import AqlComment, AqlLexerRules;
it compiles.
这篇关于Antlr4 导入组合语法失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!