我为项目DeveelDB开发了一个SQL-2003 ANTLR4语法:这为其基本功能定义了主要的SQL语句。
无论如何,我们还开发了一组外部库来扩展数据库的功能:例如a XML module支持分析列的XML数据或a Open-GIS SFS module以支持空间操作
考虑到系统的体系结构,使用在系统构建时注册的系统函数可以很容易地完成所有操作,并且SQL解析器可以顺利地使用它。
我的问题是关于定义一个新的ANTLR4语法的可能性,该语法从主项目中的现有SQL语法继承并重新定义单个规则,包括特定于功能的命令,而不是在主语法中定义它们,或者更糟糕的副本并将.g4语法粘贴到模块项目中,并直接在那里重新定义规则。
感谢您的建议!
答案 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语法结构,副标题语法导入一节中查看其余内容。