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

我应该使用Lex还是自制的解决方案来解析公式?

  •  4
  • FreeMemory  · 技术社区  · 15 年前

    假设你有一个变量,它包含一个整数。你也有一些可以应用于数字的函数,例如。

    • sqr -把数字平方
    • flp -翻转数字的位
    • dec
    • inc -增加数字

    你可以说, do_formula(a, "2sqr+inc+flp") . 如果a是3,它将平方它两次(81),增加它(82),然后翻转它的位(~82——如果处理有符号整数,我相信是-83)。

    解析公式的最佳方法是什么?它相对简单,我正在考虑让所有的操作码都是3个字符。。。使用莱克斯会不会太过分了?我应该写一个简单的自制的解决方案还是完全使用其他的解决方案?

    我意识到上面的例子是愚蠢的;我没有建立一个计算器,可以做到这一点,但它说明了我正在努力做得足够好。

    5 回复  |  直到 15 年前
        1
  •  3
  •   Chinmay Kanchi    15 年前

    如果你的语法不是超复杂的,你不介意用Python来做, pyparsing 可能就是医生要的。我实现了一个相当类似的方法来解析化学方程式,花了我一个小时左右的时间。我想在这里添加代码,但它不是特别相关。

        2
  •  1
  •   Hamish Grubijan    15 年前

    dct = {'sqr' : lambda a: a * a, ...}
    
    ntimes, op = token[:-3], token[-3:]
    ntimes = 0 if len(ntimes) == 0 else int(ntimes)
    
    ..
    dct[op](a)
    
        3
  •  0
  •   Chuck Vose    15 年前

    这真的取决于你的项目最终会有多大:如果你想创造一种新的语言或是一些比+更有趣的语法,那么我会说lex将是一个有趣和有趣的方式度过一个下午。

    最后的问题是用哪种语言进行解析?Haskell将是一个非常有趣的选择,并且在我几年前编写第一个解析器时为我提供了很多有趣的启示。

        4
  •  0
  •   Peter    15 年前

    你的母语是什么?对于鲁比,我真的很喜欢 treetop . 开始有点困难,但我成功地用它解析了更复杂的数学表达式。

        5
  •  -1
  •   jkndrkn    15 年前

    如果你有一些空闲时间,想学习一种新的编程模式,那就来看看Prolog吧!