我们使用 Shutting-Yard 算法来评估表达式。我们可以通过简单地应用算法来验证表达式。如果缺少操作数、不匹配的括号和其他东西,它会失败。然而,Shunting-Yard 算法具有比人类可读的中缀更大的支持语法。例如,
1 + 2
+ 1 2
1 2 +
是所有可接受的方式来提供“1+2”作为Shunting-Yard 算法的输入。'+ 1 2' 和 '1 2 +' 不是有效的中缀,但标准的 Shutting-Yard 算法可以处理它们。该算法并不真正关心顺序,它按优先顺序应用运算符,获取“最近”操作数。
我们希望将输入限制为有效的人类可读的中缀。我正在寻找一种方法来修改 Shunting-Yard 算法以使中缀无效或在使用 Shunting-Yard 之前提供中缀验证。
有谁知道任何已发表的技术可以做到这一点?我们必须同时支持基本运算符、自定义运算符、括号和函数(带有多个参数)。除了在线基本操作员之外,我还没有看到任何可以使用的东西。
谢谢