.net 重写ANTLR4语法中的单个规则

.net 重写ANTLR4语法中的单个规则,.net,parsing,antlr4,.net,Parsing,Antlr4,我为这个项目开发了一个SQL-2003Antlr4语法:它为它的基本特性定义了主要的SQL语句 无论如何,我们还开发了一组外部库来扩展数据库的功能:例如,支持对列的XML数据进行分析或支持空间操作 考虑到系统的体系结构,使用在系统构建时注册的系统函数可以很容易地完成所有操作,并且SQL解析器可以顺利地处理这些操作 我的问题是,是否可以定义一个新的ANTLR4语法,该语法继承主项目中现有的SQL语法,并重新定义单个规则,以包括特定于功能的命令,而不是在主语法中定义它们,更糟糕的是,将.g4语法复制

我为这个项目开发了一个SQL-2003Antlr4语法:它为它的基本特性定义了主要的SQL语句

无论如何,我们还开发了一组外部库来扩展数据库的功能:例如,支持对列的XML数据进行分析或支持空间操作

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

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

谢谢你的建议

某种“继承”是可能的。只需查找关键字“导入”。 antlr4手册中的示例: “父语法”

“儿童”语法

实际发生的是

grammar MyELang;
stat : (expr ';')+ ;
expr : INT | ID ;
INT : [0-9]+
WS : [ \r\t\n]+ -> skip ;
ID : [a-z]+ ;
同一本书中的一段引用MyELang继承了规则stat、WS和ID,但它覆盖了规则expr并添加了INT


剩下的你可以在书中的15.2语法结构部分,副标题语法导入

谢谢:这回答了我的问题。我会试试看。事实上,我已经应用了语法继承和lexer导入,但我从未尝试过重写规则
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]+ ;