【问题标题】:use variables in Lemon parser?在柠檬解析器中使用变量?
【发布时间】:2012-05-08 01:00:33
【问题描述】:

我想在我的 Lemon 解析器驱动的应用程序中允许数学变量。例如,如果用户输入 x^2+y,我希望能够针对 100000 对不同的 x 和 y 值进行评估,希望不必每次都重新解析。我能想到的唯一方法是让解析器生成一个对象树,然后在给定输入时评估表达式。有没有更好/更简单/更快的方法?

这里的性能可能是个问题。但我也关心编码和代码维护的便利性。

【问题讨论】:

    标签: parsing math parser-generator lemon


    【解决方案1】:

    如果您想要最可维护的代码,请在解析时评估表达式。不要造树。

    如果您想多次重新执行表达式,并且表达式很复杂,则需要避免重新解析(按照可维护性从高到低的顺序):构建树并评估,生成线程代码并评估,生成本机代码和评估。

    如果表达式通常像您的示例一样简单,则动态评估的递归下降手动编码解析器可能会非常快,并且工作得很好,即使是 100,000 次迭代。此类解析器的执行时间可能比 Lemon 少得多。

    【讨论】:

      【解决方案2】:

      这确实是您通常会这样做的方式,除非您想生成实际(真实或虚拟)代码。 x 和 y 在您的情况下只是变量,因此您将填写实际值,然后调用 Evaluate 函数来评估表达式。然后树节点将包含指向变量 x 和 y 的指针,依此类推。无需为每对测试值解析它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多