如何处理antlr语法和目标语言之间的函数名冲突



我有一个包含eval和round函数名的语法,这些已经是python中的函数,当我尝试使用

生成侦听器时:

antlr4 -listener -lib/src/grammar -Dlanguage=Python3 -o/gen没有参观者/src/语法/Grammar.g4

得到如下结果:

(134):

错误语法。G4:138:0:符号轮与生成的冲突目标语言代码或运行时错误(134):Grammar.g4:174:0:符号eval与目标语言或中生成的代码冲突运行时错误(134):语法。G4:62:3:符号eval与以目标语言生成的代码或运行时错误(134):语法。G4:134:3:符号轮与目标中生成的代码冲突语言或运行时

我不能简单地将eval/round更改为不同的名称,因为我正在编写不同dll的克隆。是否有可能在不更改语法语言语法的情况下以另一种方式创建名称空间或解决此问题?

可能解决您的问题的方法是在违规规则的前面加上r_之类的前缀。

的例子:当前:

 eval:  'eval' anotherRule ';' ;
 anotherRule  : '1';

改变:

 r_eval:  'eval' anotherRule ';' ;// change the rule name since eval is a reserved identifier in Python
 anotherRule  : '1'; // you don't have to change this rule, since "anotherRule" is most likely not reserved.

注意'eval'(用户在dsl中输入的关键字)是而不是更改的!

相关内容

  • 没有找到相关文章

最新更新