代码之家  ›  专栏  ›  技术社区  ›  bernhardrusch

计算用户定义公式(用C++)

c++
  •  10
  • bernhardrusch  · 技术社区  · 16 年前

    我们希望在我们的C++程序中有用户定义的公式。 例如价值 V=X+(Y-(Z-2))/2 . 在程序的后面,用户将定义x、y和z->程序应返回计算结果。
    有些时候公式可能会更改,所以下次程序应该分析公式并添加新值。

    有什么主意/提示怎么做这样的事吗?

    到目前为止,我只是想写一个解析器来计算这些公式——也许对此有什么想法?

    8 回复  |  直到 16 年前
        1
  •  3
  •   Mats Fredriksson    16 年前

    如果它将被频繁使用并且将来会被扩展,我几乎建议您在代码中添加python或lua。 LUA 是一种非常轻量的脚本语言,您可以使用它并提供新的函数、运算符等。如果您想做更健壮和复杂的事情,请使用python。

        2
  •  1
  •   levand    16 年前

    可以将公式表示为操作树和子表达式。您可能需要为操作类型和变量定义类型或常量。

    然后,您可以很容易地编写一个在树中循环的方法,对传入的任何值应用适当的操作。

        3
  •  1
  •   warren    16 年前

    为此构建自己的解析器应该是一个直接的操作:

    )将公式从中缀转换为后缀符号(典型的compsci赋值)(我将使用堆栈) )等待获取所需的值 )弹出中缀项的堆栈,在需要时删除变量的值 )显示结果

        4
  •  0
  •   OysterD    16 年前

    使用 Spirit (例如)要解析(以及它提供的“语义操作”来构造一个表达式树,然后您可以操作它,例如,计算),看起来是一个非常简单的解决方案。你可以找到算术表达式的语法 there 例如,如果需要…(你自己想出来很简单)。

    注:精神是 非常 学习起来很简单,也很适合这样的任务。

        5
  •  0
  •   Lasse V. Karlsen    16 年前

    通常有两种方法可以实现,有三种可能的实现:

    1. 正如你所接触到的,一个计算公式的库
    2. 把公式编译成代码

    这里的第二个选项通常是通过编译一些可以作为插件加载的东西来完成的,或者它可以编译成一个单独的程序,然后被调用并生成必要的输出。

    对于C++,我猜想一个用于评估的库可能存在于某处,所以我将从那里开始。

        6
  •  0
  •   Geoff    16 年前

    如果你想自己写,可以搜索“形式自动机”和/或“有限状态机语法”。

    一般来说,您将要做的是解析字符串,在堆栈上按字符。然后开始弹出字符,并根据弹出的内容执行任务。如果强制公式反转波兰符号,则更容易编写代码。

        7
  •  0
  •   Lehane    16 年前

    为了让您的生活更轻松,我认为最好通过一个GUI来获得这种输入,在这个GUI中,用户可以输入的内容受到限制。

    如果您打算从命令行(这是我从您的帖子中得到的印象)执行此操作,那么您可能应该定义一组严格的允许输入(例如,只有单个字母变量,没有空格,只有特定的数学符号:()+-*/等)。

    然后,您需要:
    读取输入字符数组
    分析它以建立变量和操作的列表
    执行这些行动 BOMDAS 秩序

        8
  •  0
  •   David Robbins    16 年前

    ANTLR 您可以创建一个解析器/编译器来解释用户输入,然后使用访问者模式执行计算。 A good example is here 但它在C中。你应该能够快速适应你的需求,并继续使用C++作为你的开发平台。