我正在编译 https://github.com/antlr/grammars-v4/blob/master/antlr/antlr4/examples/CPP14.g4 语法(我将语法文件重命名为 C.g4 并更改了第一行在语法文件中到
grammar C;
)
总结:
C.g4 语法在 PyCharm IDE 内的工具输出中编译无错误
CParser.py 文件(antr4 -o 命令的输出)在第 15273 行有不正确的 python 代码行
if((None if localctx.val is None else localctx.val.text).compareTo("0")!=0) throw new InputMismatchException(this);
这是一个已知的错误吗?
详情:
从 PyCharm IDE 中。
Ctrl-Shift+G
“工具输出”窗口上不会产生错误:
2024-01-17 20:59:43: antlr4 -o C:\Users\xxxx\Documents\Git\GitHub\c2p-antlr4\gen -listener -visitor -Dlanguage=Python3 -lib C:\Users\xxxx\Documents\Git\GitHub\c2p-antlr4 C:/Users/xxxx/Documents/Git/GitHub/c2p-antlr4\C.g4
生成的代码有错误,如下面的CParser.py代码所示:
注意第 15273 行。我在尝试在代码文件上运行解析器时发现了错误。使用解析器时会遇到该行。
这不是有效的 Python 代码!有没有人见过这个问题和/或有解决办法吗?
该语法在第 1093 行有 1 段目标特定代码:
{if($val.text.compareTo("0")!=0) throw new InputMismatchException(this);}
这似乎是Java代码。要么删除它,要么将其更改为Python:
{if $val.text != "0": raise Exception('Oops!')}
然后再试一次。