解析字符串表达式

Parse a string expression

我需要解析一个包含表达式的字符串。该语言是专有的,我不确定我是否知道完整的语法,但基本上示例表达式如下所示:

"some_name+(some_other_name * 4 * different_name)+ 'h40028"

我已经将各种名称图示为 some_name 等,我需要将其替换为我存储的字典中的等效整数。就引用了多少变量或数字而言,表达式的长度没有限制。

然后我需要计算结果表达式。语法允许空格和基本数学运算符:+-*(可能是 /

我对词法分析器和解析器几乎一无所知,因此我正在寻找最简单的方法。

谢谢!

根据你的字典替换:

my_dict = {'Mark': 2, 'Susan': 1, 'Billy': 3}
strings = 'Mark + (Susan * 4 * Billy)'

for k, v in my_dict.items():
    strings = strings.replace(k, str(v))

print eval(strings)

您可以使用 compiler 模块来解析方程,(为了避免使用 eval 的风险!!!):

>>> import compiler
>>> eq="some_name+(some_other_name * 4 * different_name)+ h40028"
>>> ast= compiler.parse( eq )
>>> ast
Module(None, Stmt([Discard(Add((Add((Name('some_name'), Mul((Mul((Name('some_other_name'), Const(4))), Name('different_name'))))), Name('h40028'))))]))