我需要解析包含表达式的字符串。该语言是专有的,我不确定我是否知道完整的语法,但基本上一个示例表达式如下所示:
"some_name+(some_other_name * 4 * different_name)+ 'h40028"
我已经将各种名称说明为some_name等,我需要将其替换为我存储的字典中的整数等价物。根据引用的变量或数量的多少,对表达式的长度没有约束。
然后我需要评估结果表达式。语法允许空格和基本数学运算符:+-*
(可能/
)
我几乎不知道lexxers和解析器,因此我正在寻找最简单的方法。
谢谢!
答案 0 :(得分:1)
根据您的字典替换:
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)
答案 1 :(得分:0)
要解析一个等式,你可以使用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'))))]))