如何将ANTLR语法文件拆分为多个

时间:2015-10-07 06:34:08

标签: parsing grammar antlr4

我有一个大的语法文件,并计划将其拆分为多个文件,以便我可以在另一个语法文件中重用其中一些较小的文件。我试过这样做但失败了。你能否告诉我这个功能是否可用,如果可以,请指导我一个例子。

2 个答案:

答案 0 :(得分:3)

如果你想拆分词法分析器和解析器。

词法:

lexer grammar HelloLexer;
Hello : 'hello' ;
ID : [a-z]+ ;             // match lower-case identifiers
WS : [ \t\r\n]+ -> skip ; // skip spaces, tabs, newlines

分析器:

parser grammar HelloParser;
options { tokenVocab=HelloLexer; }
r  : Hello ID ;      

请记住将文件命名为HelloLexer.g4和HelloParser.g4

如果要导入整个语法,则应使用import关键字

grammar Hello;

import OtherGrammar;

Hello : 'hello' ;
ID : [a-z]+ ;             // match lower-case identifiers
WS : [ \t\r\n]+ -> skip ; // skip spaces, tabs, newlines    
r  : Hello ID ;

答案 1 :(得分:2)

你没有提到ANTLR版本,所以我假设你正在使用当前的版本 - 4.x. 在ANTLR4中,可以使用import关键字导入语法。 像这样:

档案:CommonLexerRules.g4

lexer grammar CommonLexerRules;

ID  :   [a-zA-Z]+ ;
...

档案:MyParser.g4

grammar MyParser;      
import CommonLexerRules; //includes all rules from lexer CommonLexerRules.g4
...

“主语法”中的规则会覆盖导入的语法中用于实现继承的规则。 在此处查看更多详细信息:https://theantlrguy.atlassian.net/wiki/display/ANTLR4/Grammar+Structure#GrammarStructure-GrammarImports