4

我有一个包含名为 eval 和 round 的函数名称的语法,这些已经是 python 中的函数,当我尝试使用以下方法生成侦听器时:

antlr4 -listener -lib /src/grammar -Dlanguage=Python3 -o /gen -no-visitor /src/grammar/Grammar.g4

我得到以下信息:

错误(134):Grammar.g4:138:0:符号轮与目标语言中生成的代码或运行时错误(134):Grammar.g4:174:0:符号评估与目标语言中生成的代码或运行时错误冲突( 134): Grammar.g4:62:3: symbol eval 与在目标语言或运行时生成的代码冲突 (134): Grammar.g4:134:3: symbol round 与在目标语言或运行时生成的代码冲突

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

4

1 回答 1

10

可能会解决您的问题的方法是在违规规则前面加上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 中输入的关键字)不会更改!

于 2014-08-23T12:20:51.793 回答