如何创建数学公式解释器
我必须用 PHP 创建一个简单的公式解释器。它必须支持 4 个运算符:exp、ln、加法、减法和括号。
我应该从哪里开始?我听说用户输入的公式必须转化为树,是真的吗?也许口译员已经存在?
I have to create a simple formula interpreter with PHP. It has to support 4 operators: exp, ln, addition, subtraction and brackets.
Where should I start? I've heard that the formula entered by the user must be transformed into a tree, is that true? Maybe interpreters already exist?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
是的,正确的是用户输入的公式必须转换成抽象语法树。
数学公式通常使用 中缀 表示法编写。您需要将其转换为
postfix
或prefix
表示法。后缀
表示法也称为反向波兰表示法。您可以使用调车场算法来完成此操作。 查看详细示例。
此 stackoverflow 问题链接PHP 中的实现。
Yes, correct the formula entered by the user must be converted into an abstract syntax tree.
Mathematical formulas are normally written using the infix notation. You need to convert this to
postfix
orprefix
notation. Thepostfix
notation is also known as the reverse polish notation.You can use the shunting yard algorithm to accomplish this. See a detailed example.
This stackoverflow question links to a implementation in PHP.
您可能可以使用基本的字符串操作将公式重写为 PHP 表达式并对其进行
eval
。根据语法,您甚至可以单独保留表达式,只为exp
和ln
定义 PHP 函数,因此当您eval
输入时可以直接评价。这比为如此简单的语言编写自己的解析器和解释器要简单得多。
如果这是课堂作业,你的老师可能会因为这样做而让你不及格。
You could probably use basic string manipulation to rewrite the formula into a PHP expression and
eval
it. Depending on the syntax, you could even leave the expression alone and just define PHP functions forexp
andln
, so when youeval
the input it can be evaluated directly.That'd be a lot more straightforward than writing your own parser and interpreter for such a simple language.
If this is classwork, your teacher will likely fail you for doing it that way.
我创建了这个,请查看:公式解释器
它是如何工作的?
首先,使用公式及其参数创建
FormulaInterpreter
实例。使用
execute()
方法解释公式。它将返回结果:在一行中
示例
关于公式
如果你愿意的话,你可以改进它!
I created this, check it out: Formula Interpreter
How does it work ?
First, create an instance of
FormulaInterpreter
with the formula and its parametersUse the
execute()
method to interpret the formula. It will return the result:in a single line
Examples
About the formulas
You can improve it if you want to!