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