0

ちょっとした演習として、潜在的なタグ、演算子、および括弧のセットを使用できる小さなパーサーを Python で作成して、次のように指定できるようにすることに興味があります。

(DP>10) & (LowMQ[0] < 0.05) & (SPV < 0.05)

タグ DP、LowMQ、SPV、および演算子と操作の順序を解析する必要があります。Java ではかなり頻繁にこれが行われているのを見てきましたが、Python では見たことがありません。どこから始めるべきか、またはサンプルコードに関する提案はありますか?

4

2 に答える 2

1

構文は Python の構文のサブセットであるため、Python の組み込みを使用できますast.parse

>>> import ast, textwrap
>>> src = "(DP>10) & (LowMQ[0] < 0.05) & (SPV < 0.05)"
>>> print '\n'.join(textwrap.wrap(ast.dump(ast.parse(src)), width=80))
Module(body=[Expr(value=BinOp(left=BinOp(left=Compare(left=Name(id='DP',
ctx=Load()), ops=[Gt()], comparators=[Num(n=10)]), op=BitAnd(),
right=Compare(left=Subscript(value=Name(id='LowMQ', ctx=Load()),
slice=Index(value=Num(n=0)), ctx=Load()), ops=[Lt()],
comparators=[Num(n=0.050000000000000003)])), op=BitAnd(),
right=Compare(left=Name(id='SPV', ctx=Load()), ops=[Lt()],
comparators=[Num(n=0.050000000000000003)])))])

一般的なケースは解決しませんが、非常に単純です。

于 2012-09-26T17:59:13.330 に答える
0

Yappsは有望に見えます。http://theory.stanford.edu/~amitp/yapps/

于 2012-09-26T17:44:12.113 に答える