0

Pythonで式/インフィックスを検証するにはどうすればよいですか?出来ますか?たとえば :あなたはPythonのスタイルの表現をしたい場合はPythonの式/インフィックスを検証する

a-d*9 
5-(a*0.3-d+(0.4-e))/k*5 
(a-d*9)/(k-y-4.3*e)+(t-7*c) 
+3

答えは簡単です。パーサーを作成します。これまでに試したことを示すことができますか?特に問題はありますか? – Simon

+0

私はパーサーを作成しました。それを実行する前に。私はそれを検証する必要があります。 – Zeck

+2

@Zeck:パーサーは、解析に失敗して式を検証します。パーサーが完了できない場合、式は無効です。 **解析する前に**検証しないでください。バリデーションは解析の結果です。パーサが終了した場合、それは有効です。パーサーが失敗した場合、それは無効です。 「事前検証」しないでください。それは間違っている。 –

答えて

2

、あなたがastモジュールでパーサーを使用してSyntaxErrorを確認することができます。

>>> ast.parse('5-(a*0.3-d+(0.4-e))/k*5') 
<_ast.Module object at 0x7fc7bdd9e790> 
>>> ast.parse('5-(a*0.3-d+(0.4-e))/k*') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib/python2.6/ast.py", line 37, in parse 
    return compile(expr, filename, mode, PyCF_ONLY_AST) 
    File "<unknown>", line 1 
    5-(a*0.3-d+(0.4-e))/k* 
         ^
SyntaxError: unexpected EOF while parsing 

それはあなたが実際に必要とするよりもはるかを解析かもしれないが:

>>> ast.parse('def spam(): return "ham"') 
<_ast.Module object at 0x7fc7bdd9e790> 

返される解析ツリーは慎重に検査する必要があります。