C# 解析-最左边和最右边的派生

C# 解析-最左边和最右边的派生,c#,parsing,C#,Parsing,我认为,在留下大部分推导之后的过程,我并不完全信服。 我只是对如何在C#中创建解析器感兴趣。在过去的几天里,我一直在研究这个理论,但我遇到了一些我不完全理解的东西,比如最右边和最左边的推导: Input - aa+a* 语法是S->S+| S*| a 我的解决方案: s | S+S | SS+S | a+SS | AA+SA | AA+A 很明显,我的纸质解决方案有内部叶子什么的 我有一个解决方案,只是不相信它在解析器树中是正确的。 任何解决方案都将不胜感激。有人知道包括解析树在内的正确解

我认为,在留下大部分推导之后的过程,我并不完全信服。 我只是对如何在C#中创建解析器感兴趣。在过去的几天里,我一直在研究这个理论,但我遇到了一些我不完全理解的东西,比如最右边和最左边的推导:

Input  - aa+a* 
语法是
S->S+| S*| a

我的解决方案: s | S+S | SS+S | a+SS | AA+SA | AA+A 很明显,我的纸质解决方案有内部叶子什么的

我有一个解决方案,只是不相信它在解析器树中是正确的。
任何解决方案都将不胜感激。有人知道包括解析树在内的正确解决方案吗?

解析树

| |==| a | | |==|==| a | | | | + | |==| a | | * ||==|a | | |====
a | | ||+ | |==|a | |* 如何构建此树?

given a -> shift (a) given a -> shift (a) given + -> reduce ((a) (a) +) given a -> shift (a) given * -> reduce (((a) (a) +) (a) *) 给定一个->班次(a) 给定一个->班次(a) 给定+->减少((a)(a)+) 给定一个->班次(a) 给定*->减少((a)(a)+(a)*) 这个解析树

- S
-
  - S
  -
    - S
    - a
  -
    - S
    - a
  - +
-
  - S
  - a
- '*'

是通过使用。希望这能帮助您测试各种语法/输入组合。

您应该发布解决方案中解析树的表示形式。如果可以,我建议您使用Antlr(),它可以通过NuGet for C#获得。我知道Antlr,但我只是想了解解析技术,并将它们应用到我的项目中。你应该将图像中的文本重写为正确的文本。没那么难。我想你一点也解释不出来好吗?@user3461632-先给我看看你的解决方案。S | S+S | S*S+S | a+S*S | AA+S*a | AA+a*作为一棵树很难在这个编辑器中编写它,除非我将它粘贴到txt中。doc@user3461632-你能把它放在你的问题中,并用
pre
元素?完成了,完成了,我刚开始堆叠,所以不知道如何将其显示为树。有趣。我可能需要开始使用解析器生成器进行实验。