我在网上搜索了一些关于开发C抽象语法树的新手信息,但是我只能为已经在“知道”的人找到信息。我是一个业务线应用程序开发人员,所以像这样的话题有点过头了,但这是为了我自己的教育,所以我愿意花时间学习任何必要的概念。
通常,我想了解从代码字符串开发代码抽象表示背后的技术。更具体地说,我希望能够使用这个ast来做c语法突出显示。(我意识到语法突出显示不需要AST,但这似乎是学习一些“编译器级技术”的好机会。)
如果这个问题有点宽泛,我很抱歉,但我不知道该怎么问。
谢谢!
最佳答案
首先,您需要了解什么是解析,什么是抽象语法树。为此,您可以先查阅“AA>”。
你真的需要花一些时间和编译器文本书来理解抽象语法树是如何与解析相关的,并且可以在解析时构建;经典引用是AHO/ULLMAN/SETI的“编译器”书(很容易在Web上找到)。你可能会发现Wikipedia on abstract syntax trees的答案很有启发性。
一旦你了解如何构建一个简单语法的AST,你就可以把注意力转向C语言之类的东西。这里的问题是纯粹的规模;玩一个有20条语法规则的玩具语言是一回事。使用几十万条规则的语法是另一回事。经验将使小的人更容易理解大的人是如何组合在一起的,以及如何与他们一起生活。
您可能不想构建自己的c语法(或者实现c标准中的语法);这是相当多的工作。你可以得到可用的工具,这些工具会让你进入C语言(Roslyn已经被提到了;ANTLR有一个C语法分析器,还有很多)。
确实,您可以使用ast来突出显示语法(尽管这可能是用大锤杀死gnat)。大多数人不怎么考虑(但编译器的书强调)的是,在你有了ast之后会发生什么;大多数情况下,它们本身并不有用。你实际上需要更多的机器来做任何有趣的事情。
而不是重复这一点(我总是看到同样的问题),你可以看到我的讨论关于AA>的更多细节。
关于c# - 开发抽象语法树,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10678242/