【发布时间】:2013-07-29 18:42:50
【问题描述】:
我没有编译器背景,所以我不确定这在该领域是否常见。是否有任何标准技术来解析这样的表达式? (比如说,tab表示深度)
And
A + B = 1
C + D = 1
Or
P + Q = 1
K = 1
And
Q = 1
R = 2
应该被解析为:
((A+B=1) AND (C+D=1) AND ((P+Q=1) OR (K=1)) AND ((Q=1) AND (R=2)))
我不确定我是否应该诉诸基于堆栈的评估?我目前正在尝试一个,如果可以运行,我会发布一个工作代码。
对实现这一目标的简单方法有什么建议吗?
【问题讨论】:
-
上下文是什么?它必须是“安全的”吗?或者你可以稍微改变你的语法并使用
eval()或类似的Python吗?例如,((A+B==1) and (C+D==1))是 Python 语法。 -
很遗憾,我无法更改输入。我正在解析一些 XML 文件并设法将表达式本身解析为字符串。我如何格式化字符串取决于我,但评估顺序和所有内容仍然需要注意。另外,我不想评估任何东西,只想说,获取一个用于打印的字符串。
-
您是否将表达式解析为树?然后通过替换这些变量的数字来评估它们?
-
+1 提出了一个有趣的问题,但我有点困惑——你只是在问解析,还是关于如何进行评估?
-
@MattFenwick:对不起,我的意思是我现在不太关心评估表达式。我只是想获取输入的字符串表示形式。
标签: python parsing expression operator-precedence