用PLY解析python

时间:2011-02-08 16:51:48

标签: python parsing ply

我正在尝试编写一个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

1 个答案:

答案 0 :(得分:1)

从你的代码:

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>