2011-02-08 21 views
-2

私はPythonパーサーを作成しようとしていますが、私の意見ではif文を解析できますが、そうではありません。 「構文エラー」というメッセージが表示されます。PythonでPLYを解析する

私が間違っていることを誰かに教えてもらえますか?

ありがとうございます。

コードはここにある: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 
+2

「構文エラー」というメッセージが表示されます。それが私たちを助けるかもしれません。 –

+0

あなたの実際の質問とは無関係のメモでは、Pythonのastモジュールを使用して調べることができます。そうすれば、Pythonのパーサを使うことができ、問題の2neko部分に集中することができます。 –

答えて

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>