Antlr4 编译器 PyCharm 插件生成不正确的 Python3 代码。这是错误还是操作员错误?

问题描述 投票:0回答:1

我正在编译 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 代码!有没有人见过这个问题和/或有解决办法吗?

我使用的插件是1.22版本:

python parsing pycharm antlr4
1个回答
0
投票

该语法在第 1093 行有 1 段目标特定代码:

{if($val.text.compareTo("0")!=0) throw new InputMismatchException(this);}

这似乎是Java代码。要么删除它,要么将其更改为Python:

{if $val.text != "0": raise Exception('Oops!')}

然后再试一次。

© www.soinside.com 2019 - 2024. All rights reserved.