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

时间:2014-08-22 19:34:39

标签: python parsing grammar antlr4 name-conflict

我的语法包含名为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:   符号eval与目标语言或生成的代码冲突   运行时错误(134):Grammar.g4:62:3:符号eval与   生成目标语言或运行时错误的代码(134):   Grammar.g4:134:3:符号与目标中生成的代码冲突   语言或运行时

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

1 个答案:

答案 0 :(得分:9)

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