Antlr4从路径导入语法

3

以下是我认为答案为否定的简单问题:

是否可以从子目录导入语法?例如:

grammar literals;

import myFolder/IntegerLiterals;

以下是结构:

/ 
 literals.g4
 myFolder/
    IntegerLiterals.g4
2个回答

2

在示例代码库中,有一个使用ANTLR 4编写的ANTLR 4语法ANTLRv4Parser.g4

让我们仔细看看:

delegateGrammars
    :   IMPORT delegateGrammar (COMMA delegateGrammar)* SEMI
    ;

delegateGrammar
    :   id ASSIGN id
    |   id
    ;

id  :   RULE_REF
    |   TOKEN_REF
    ;

看起来答案确实是否定的,因为您不能在那里放置目录分隔符。文件名必须是有效的规则/令牌名称。


感谢您链接到源代码! - Diolor
@Diolor,真正的源代码实际上在这里,使用ANTLR 3编写(https://github.com/antlr/antlr4/blob/master/tool/src/org/antlr/v4/parse/ANTLRParser.g)。它有一个等效的“delegateGrammars”规则。 - Lucas Trzesniewski
是的,这是一个语法ID而不是文件名。 - Terence Parr

2

我曾经遇到同样的问题,找到了这个网站,但没有找到解决方案。在更多的谷歌搜索后,我找到了一个解决方案:

实际上,现在有一种方法可以从其他目录中导入语法:

在运行antlr时使用-lib选项来定义你想要导入的语法所在的位置。这里是选项的文档: https://github.com/antlr/antlr4/blob/master/doc/tool-options.md

因此,你可以编写你的语法:

grammar literals;
import IntegerLiterals;

然后在命令行中运行:
antlr4 -lib C:/.../myFolder literals.g4

之前的回答指出你导入了语法ID而非文件名,这是正确的,而且在2014年可能已经说到了极致。但是使用“-lib”标志会是今天的好建议。 - Roy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接