在离开最左派之后的过程我认为,我并不完全相信。 我只是对如何在C#中创建解析器感兴趣。我过去几天一直在研究这个理论,而且我已经进入了一些我不完全理解哪个是最右边和最左边的推导的例子:
Input - aa+a*
,语法为S -> S S + | S S * | a
我的解决方案: 小号 | S + S | 小号 S + S | 一个+ S 取值 | AA + S 甲 | AA + A 显然我的纸张解决方案有内部叶子,什么不是。
我有一个解决方案,只是在解析器树中没有说服它。 任何解决方案都将非常感谢。有人知道正确的解决方案,包括解析树吗?
答案 0 :(得分:0)
解析树
| |==| a | | |==|==| a | | | | + | |==| a | | *
如何构建此树?
given a -> shift (a) given a -> shift (a) given + -> reduce ((a) (a) +) given a -> shift (a) given * -> reduce (((a) (a) +) (a) *)
答案 1 :(得分:0)
此解析树
- S
-
- S
-
- S
- a
-
- S
- a
- +
-
- S
- a
- '*'
由this Perl script使用general BNF parser生成。希望这可以帮助您测试您可能拥有的各种语法/输入组合。