Antlr4导入的组合语法失败

时间:2017-09-28 22:33:16

标签: import antlr4

我现在正在......

error(56): AqlCommentTest.g4:12:4: reference to undefined rule: htmlCommentDeclaration
error(56): AqlCommentTest.g4:13:4: reference to undefined rule: mdCommentDeclaration

词法分析器语法的导入似乎确实在加载。 以下文件显示了该问题。

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]? '"' ;

可以通过删除'import AqlLexerRules;'来停止错误。来自'AqlCommentTest.g4'文件。

为什么这会“解决”这个问题?

如何查看是否以及如何实际应用antlr4 import语句?

1 个答案:

答案 0 :(得分:2)

如果导入词法规则最后:

import AqlComment;
import AqlLexerRules;

错误更改为:

error(54): AqlCommentTest.g4:4:0: repeated grammar prequel spec (options, tokens, or import); please merge

因此问题是:是否存在关于导入的限制?

Definitive ANTLR 4 Reference 15.2语法结构或doc中,您可以找到:

  

每个选项,导入和令牌规范最多只能有一个。

如果我将导入更改为:

import AqlComment, AqlLexerRules;

它编译。<​​/ p>