使用 PLY 解析 python

发布于 2024-10-16 10:33:54 字数 497 浏览 4 评论 0原文

我正在尝试编写一个 python 解析器,在我看来它可以解析“if 语句”,但事实并非如此。 它向我显示“语法错误”消息。

有人可以告诉我我做错了什么吗?

提前致谢。

代码在这里: https://github.com/narke/py2neko


我像这样修改了输入字符串:

s = '''if 5:
    print 10
else:
    print 20 \n'''
check_syntax(s)

输出是:

Syntax error at '5'
atom: 10
factor None
None
cmp: None None
atom: 20
factor None
None
cmp: None None 
simple_stmt: None

I'm trying to write a python parser, and in my opiniion it could parse an "if statement" but it doesn't.
It shows me a "syntax error" message.

Can someone tell me what I'm doing wrong?

Thanks in advance.

The code is here: https://github.com/narke/py2neko


I modified the input string like this:

s = '''if 5:
    print 10
else:
    print 20 \n'''
check_syntax(s)

and the output is:

Syntax error at '5'
atom: 10
factor None
None
cmp: None None
atom: 20
factor None
None
cmp: None None 
simple_stmt: None

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

长伴 2024-10-23 10:33:54

从您的代码来看:

s = "if 5:\n"
check_syntax(s)

if 5:\n 不是有效的语法,因为它不是完整的 if 语句。如果表达式为 True,您需要提供一个套件(要执行的代码)。例如:

>>> if 5:
... 
  File "<stdin>", line 2

    ^
IndentationError: expected an indented block

>>> compile('if 5:\n', '<string>', 'exec')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 1
    if 5:
        ^
SyntaxError: unexpected EOF while parsing

>>> compile('if 5:\n  print 5', '<string>', 'exec')
<code object <module> at 0xb7f60530, file "<string>", line 2>

From your code:

s = "if 5:\n"
check_syntax(s)

if 5:\n is not valid syntax because it is not a complete if statement. You need to provide a suite (code to execute) if the expression is True. For example:

>>> if 5:
... 
  File "<stdin>", line 2

    ^
IndentationError: expected an indented block

>>> compile('if 5:\n', '<string>', 'exec')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 1
    if 5:
        ^
SyntaxError: unexpected EOF while parsing

>>> compile('if 5:\n  print 5', '<string>', 'exec')
<code object <module> at 0xb7f60530, file "<string>", line 2>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文