以下是我认为答案为否定的简单问题:
是否可以从子目录导入语法?例如:
grammar literals;
import myFolder/IntegerLiterals;
以下是结构:
/
literals.g4
myFolder/
IntegerLiterals.g4
在示例代码库中,有一个使用ANTLR 4编写的ANTLR 4语法ANTLRv4Parser.g4。
让我们仔细看看:
delegateGrammars
: IMPORT delegateGrammar (COMMA delegateGrammar)* SEMI
;
delegateGrammar
: id ASSIGN id
| id
;
id : RULE_REF
| TOKEN_REF
;
看起来答案确实是否定的,因为您不能在那里放置目录分隔符。文件名必须是有效的规则/令牌名称。
我曾经遇到同样的问题,找到了这个网站,但没有找到解决方案。在更多的谷歌搜索后,我找到了一个解决方案:
实际上,现在有一种方法可以从其他目录中导入语法:
在运行antlr时使用-lib选项来定义你想要导入的语法所在的位置。这里是选项的文档: https://github.com/antlr/antlr4/blob/master/doc/tool-options.md
因此,你可以编写你的语法:
grammar literals;
import IntegerLiterals;
antlr4 -lib C:/.../myFolder literals.g4