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 回答