Antlr4 PL/SQL语法文件硬编码self引用适配Node环境的咨询
关于ANTLR4 PL/SQL语法在Node.js环境中
self变量报错的问题 问题拆解与解答
是否该语法硬编码为仅适用于浏览器环境?
并非如此。ANTLR4语法中的self是用来指代解析器/词法分析器实例的写法,并非专门针对浏览器设计——只是浏览器环境中存在全局self(指向Window对象)刚好能兼容,但这只是巧合。该写法本质是ANTLR4动作代码的跨环境不兼容问题,Node.js环境中没有全局self变量,因此才会抛出ReferenceError。是否只需将
.g4文件中的self替换为this即可适配Node环境?
完全可以。在ANTLR4生成的JavaScript代码语境中,self原本就是指向当前解析器/词法分析器实例的引用,换成this后,既能在Node.js环境中正确指向实例,也能兼容浏览器环境(浏览器中这些动作代码的上下文里this同样指向对应实例)。
具体修改步骤
找到所有PL/SQL语法文件(.g4)中嵌入的动作代码,把所有self替换为this,比如你提到的PlSqlParser.g4第1377行:
// 原代码 alter_view_editionable : {self.isVersion12()}? (EDITIONABLE | NONEDITIONABLE) ; // 修改后 alter_view_editionable : {this.isVersion12()}? (EDITIONABLE | NONEDITIONABLE) ;
重新执行生成命令:
antlr4 -Dlanguage=JavaScript PlSqlParser.g4 PlSqlLexer.g4
生成的代码就能在Node.js环境中正常运行了。
内容的提问来源于stack exchange,提问作者Håvard Malm Geithus
相关产品推荐
相关产品推荐

