Разбор питона с PLY - PullRequest
       28

Разбор питона с PLY

0 голосов
/ 08 февраля 2011

Я пытаюсь написать синтаксический анализатор 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 Ответ

1 голос
/ 08 февраля 2011

Из вашего кода:

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>
...