在c+中实现一个解算器+;对于某些脚本语法中描述的问题 关于如何编写C++代码来解决一般类问题,我有一个通用的问题。这类问题在一些脚本语言中描述,这些脚本语言将由C++程序动态读取。例如,问题可描述如下: syms a b c x sol = solve(a*x^2 + b*x + c == 0) sola = solve(a*x^2 + b*x + c == 0, a)

在c+中实现一个解算器+;对于某些脚本语法中描述的问题 关于如何编写C++代码来解决一般类问题,我有一个通用的问题。这类问题在一些脚本语言中描述,这些脚本语言将由C++程序动态读取。例如,问题可描述如下: syms a b c x sol = solve(a*x^2 + b*x + c == 0) sola = solve(a*x^2 + b*x + c == 0, a),c++,dynamic,solver,C++,Dynamic,Solver,在这里,我只是使用MATLAB进行说明,而不是试图构建类似于MATLAB的任何东西。我真正的目的是要了解,一般来说,人们会如何设计一个C++程序,该脚本将包含一个脚本,它描述了一些计算指令,然后读取/解释脚本中描述的逻辑,然后执行所描述的计算。p> 程序的总体架构如下所示: (摘自维基百科上的文章) 有很多教程介绍和构建解析树,或者更常见的是抽象语法树(AST)。例如,请参见来自LLVM的 构建AST后,需要将其转换为一些内部表示形式,如字节码,并将其传递给解释器或虚拟机。在某些情况下,可以跳

在这里,我只是使用MATLAB进行说明,而不是试图构建类似于MATLAB的任何东西。我真正的目的是要了解,一般来说,人们会如何设计一个C++程序,该脚本将包含一个脚本,它描述了一些计算指令,然后读取/解释脚本中描述的逻辑,然后执行所描述的计算。p> 程序的总体架构如下所示:

(摘自维基百科上的文章)

有很多教程介绍和构建解析树,或者更常见的是抽象语法树(AST)。例如,请参见来自LLVM的

构建AST后,需要将其转换为一些内部表示形式,如字节码,并将其传递给解释器或虚拟机。在某些情况下,可以跳过此步骤,直接使用AST

解释器将获取上一步生成的输入,构造代数问题的运行时表示(这也是一个树状数据结构),并将其传递给实际的解算器


解算器将分析问题的结构,并应用相关方法找到方程的解。例如,如果
x
是一个变量,
a
b
c
是您的示例中的参数,它可以检测出它是一个二次方程,并应用众所周知的公式来找到解决方案。

Bjarne Stroustrup在他的示例中介绍了如何制作计算器(以便用户可以键入“4+6=;”程序会计算出来。)有一个可能是一个有帮助的地方开始我同意@Tas,你需要首先找到一个文本,向你展示如何实现解析器。一个源代码(相当旧)我发现Niklaus Wirth Algorithms+Data structures=Programming很有用。作为“解析器表达式术语因子”等术语的替代搜索,我建议使用库来解析这样的脚本,并调用动作以编码您认为必要的变量/数据结构中的内容。至于“执行计算“-一旦您将输入/公式存储在所选的数据结构中,您就可以找到现有答案,这是一个更加集中的问题。事实上,这整个问题太不集中和广泛了。。。。