在ANTLR4语法中覆盖单个规则

时间:2016-04-22 07:25:09

标签: .net parsing antlr4

我为项目DeveelDB开发了一个SQL-2003 ANTLR4语法:这为其基本功能定义了主要的SQL语句。

无论如何,我们还开发了一组外部库来扩展数据库的功能:例如a XML module支持分析列的XML数据或a Open-GIS SFS module以支持空间操作

考虑到系统的体系结构,使用在系统构建时注册的系统函数可以很容易地完成所有操作,并且SQL解析器可以顺利地使用它。

我的问题是关于定义一个新的ANTLR4语法的可能性,该语法从主项目中的现有SQL语法继承并重新定义单个规则,包括特定于功能的命令,而不是在主语法中定义它们,或者更糟糕的副本并将.g4语法粘贴到模块项目中,并直接在那里重新定义规则。

感谢您的建议!

1 个答案:

答案 0 :(得分:1)

种类的“继承”是可能的。只需查找关键字“导入”即可。 antlr4书的例子: “父母语法”

grammar ELang;
stat : (expr ';')+ ;
expr : INT ;
WS : [ \r\t\n]+ -> skip ;
ID : [a-z]+ ;

“孩子”语法

grammar MyELan
import ELang;
expr : INT | ID ;
INT : [0-9]+

实际发生的是

grammar MyELang;
stat : (expr ';')+ ;
expr : INT | ID ;
INT : [0-9]+
WS : [ \r\t\n]+ -> skip ;
ID : [a-z]+ ;

以及同一本书MyELang inherits rules stat, WS, and ID, but it overrides rule expr and adds INT的引用。

您可以在本书的 15.2语法结构,副标题语法导入一节中查看其余内容。