我正在尝试将自制语言中的字符串解析为一种树,例如:
# a * b1 b2 -> c * d1 d2 -> e # f1 f2 * g
应该导致:
# a
* b1 b2
-> c
* d1 d2
-> e
# f1 f2
* g
#、* 和 -> 是符号。a、b1 等是文本。
从那一刻起,我只知道评估表达式的 rpn 方法,我目前的解决方案如下。如果我在每个符号之后只允许一个文本标记,我可以很容易地将表达式首先转换为 RPN 表示法(b = b1 b2;d = d1 d2;f = f1 f2)并从这里解析它:
abc -> * de -> * # fg * #
然而,合并文本标记和其他任何东西似乎是有问题的。我的想法是创建标记令牌(M),所以 RPN 看起来像:
a M b2 b1 M c -> * M d2 d1 M e -> * # f2 f1 M g * #
这也是可解析的,似乎可以解决问题。
那说:
- 有没有人有类似的经验并且可以说它是或不是未来可行的解决方案?
- 是否有更好的方法来解析具有未定义的运算符数量的表达式?
- 你能指点我一些好的资源吗?
笔记。是的,我知道这个例子非常类似于 Lisp 前缀表示法,也许要走的路是添加一些括号,但我在这里没有任何经验。但是,源文本不得包含任何人工括号,而且我不确定如何处理潜在的中缀混合,如 # a * b -> [if value1 = value2] c -> d。
谢谢你的帮助。
编辑:似乎我正在寻找的是带有可变数量参数的后缀表示法的来源。