我们使用Shunting-Yard算法来计算表达式。通过应用该算法,我们可以验证表达式。如果存在缺少操作数、括号不匹配和其他问题,则会失败。然而,Shunting-Yard算法支持的语法比人类可读的中缀更广泛。例如,
1 + 2
+ 1 2
1 2 +
所有这些都是向 Shunting-Yard 算法提供“1+2”输入的可接受方式。“+ 1 2”和“1 2 +”不是有效的中缀表示法,但标准的Shunting-Yard算法可以处理它们。该算法实际上并不关心顺序,它根据优先级顺序应用运算符并获取“最近”的操作数。
我们想将输入限制为有效的人类可读中缀表示法。我正在寻找一种修改 Shunting-Yard 算法使其无法处理非有效中缀或在使用 Shunting-Yard 之前提供中缀验证的方法。
是否有人知道任何已发布的技术来做到这一点?我们必须支持基本运算符、自定义运算符、括号和函数(带有多个参数)。我在网上没有看到可以处理超出基本运算符的东西。
谢谢