
calculating user defined formulas (with c++)
我们希望在我们的c ++程序中有用户定义的公式。 有什么想法/提示如何做这样的事情? 到目前为止,我只是来到解决方案中,编写了一个解析器来计算这些公式-也许对此有什么想法? 如果它会经常使用并且将来会扩展,我几乎建议您将Python或Lua添加到您的代码中。 Lua是一种非常轻量级的脚本语言,您可以将其插入并提供新功能,运算符等。如果您想做更健壮和复杂的事情,请改用Python。 为此,构建自己的解析器应该是直接的操作:
)将方程式从中缀转换为后缀表示法(典型的compsci分配)(我将使用堆栈) 您可以将公式表示为操作和子表达式的树。您可能需要为操作类型和变量定义类型或常量。 然后,您可以轻松地编写一种遍历树的方法,将适当的操作应用于您传入的任何值。 使用ANTLR,您可以创建解析器/编译器来解释用户输入,然后使用Visitor模式执行计算。一个很好的例子在这里,但是在C#中。您应该能够使其迅速适应您的需求,并继续使用C ++作为开发平台。 为了使您的生活更轻松,我认为最好通过GUI来完成这种输入,在GUI中,用户只能输入内容。 如果您打算从命令行执行此操作(这就是我从您的帖子中获得的印象),那么您可能应该定义一组严格的允许输入(例如,仅单字母变量,无空格和某些数学符号:( )+-* /等。
然后,您将需要: 如果要编写自己的内容,请搜索"形式自动机"和/或"有限状态机语法" 通常,您将要做的是解析字符串,然后将字符推入堆栈中。然后开始弹出字符并根据弹出的内容执行任务。如果您将方程式强制设为反抛光符号,则编码起来会更容易。 通常有两种方法可以实现,并有三种可能的实现方式: 通常,这里的第二个选项是通过编译可以作为一种插件加载的东西来完成的,或者可以将其编译成一个单独的程序,然后调用该程序并产生必要的输出。 对于C ++,我猜想用于评估的库可能存在于某个地方,所以这就是我的起点。 使用Spirit(例如)进行解析(以及它提供的``语义动作''来构造一个表达式树,然后可以对其进行操作(例如评估))似乎是一个非常简单的解决方案。例如,如果需要,您可以在那里找到算术表达式的语法((很简单地提出自己的语法)。 注意:Spirit很容易学习,并且非常适合此类任务。 |