我有以下形式的表达式(EBNF):
<expression> ::= ["("]<base>[")"][{<modifier>"("<expression>")"}]
<base> ::= <logical>[{<modifier><logical>}]
<logical> ::= "1" | "0"
<modifier> ::= "&" | "|"
这种格式的字符串示例如下:
(1|(1&0))|(1&(1|0))
或者,我可以用后缀表示法得到这个:
110&|110|&|
在 PHP 中有没有一种简单的方法来评估这个?(即这个特定示例的结果应该是1
)。eval
由于安全问题,我想避免使用功能。
如果没有简单的方法在没有eval
函数的 PHP 中实现这一点,那么编写自定义解析器的最佳方法是什么?