我正在开发一个需要验证数学表达式的JavaScript应用程序,但不确定如何执行此操作。
我的语法示例是
(keyword1 + keyword2) * (keyword1 / (keyword1 + keyword1))
在这里,
keyword1
和keyword2
可以是任何数字,有效的运算符是标准加法,减法,乘法和除法。是否有人可能使用正则表达式有任何想法?
最佳答案
有很多解决方法。我建议您阅读有关上下文无关文法/语言的文章。这有点简单(尽管它确实是CFG),但是了解语法和解析技术总是有帮助的。
我应该注意,您在这里描述的语言不是正规语言,因此没有正规表达式可以解析它(简单地使用抽水引理证明了这一点)。此外,我建议不要使用它们以有意义的方式提供帮助-它们不是强大的解析工具。
您可以使用解析库来解决更复杂的语法并实现简单的案例。如果您正在寻找更直接的解决方案,那么递归是您的 friend :
让我们定义一个有效的表达式为:
expression ::= literal | expression op expression | (expression)
op ::= + | - | / | *
文字是数字。
考虑一下如何修改定义可以改变语言,特别是考虑一下不同的实现如何使用不同的策略来解决这个问题:从左到右的评估,或者相反的策略,等等。