开发抽象语法树

本文关键字:语法树 抽象 开发 | 更新日期: 2023-09-27 18:34:41

我已经在互联网上搜索了一些关于开发C#抽象语法树的新手信息,但我只能找到已经"知情"的人的信息。 我是一名业务线应用程序开发人员,所以像这样的主题有点超出我的头脑,但这是为了我自己的教育,所以我愿意花时间学习任何必要的概念。

通常,我想了解从代码字符串开发代码抽象表示背后的技术。 更具体地说,我希望能够使用此 AST 进行 C# 语法突出显示。 (我意识到语法高亮并不一定需要 AST,但这似乎是学习一些"编译器"级技术的好机会。

如果这个问题有点宽泛,我深表歉意,但我不确定还能怎么问。

谢谢!

开发抽象语法树

首先,您需要了解什么是解析,以及什么是抽象语法树。 为此,您可以先查阅有关抽象语法树的维基百科。

你真的需要花一些时间阅读编译器教科书来了解抽象语法树如何与解析相关,并且可以在解析时构造;经典参考是Aho/Ullman/Sethi的"编译器"一书(在网上很容易找到(。 您可能会找到SO的答案:是否有任何"有趣"的方式来学习语言,语法,解析和编译器?指导。

了解如何为简单语法生成 AST 后,可以将注意力转向 C# 之类的内容。 这里的问题是规模庞大;玩有 20 条语法规则的玩具语言是一回事。 使用几百条或一千条规则的语法是另一回事。 经验会小的会让你更容易理解大的是如何组合在一起的,以及如何与它们一起生活。

您可能不想构建自己的 C# 语法(或实现 C# 标准中的语法(;它需要做很多工作。您可以获得可用的工具,这些工具将为您提供 C# AST(已经提到罗斯林;ANTLR有一个C#解析器,还有很多(。

确实,您可以使用 AST 进行语法突出显示(尽管这可能会用大锤杀死一只蚊子(。 大多数人没有考虑太多(但编译器书籍强调(是你拥有 AST 后会发生什么;大多数情况下,它们本身没有用。 你实际上需要更多的机器来做任何有趣的事情。与其一遍又一遍地重复这一点(我一直看到同样的问题(,你可以看看我在解析后的生活上的讨论以获取更多详细信息。

你可能应该看看Phil Trelford的演讲:

在 24 小时内编写自己的编译器

这个人是个天才,会让你兴奋地学习编译器。他从字面上解释得很容易,足以让一个五岁的孩子理解。有问题的五岁孩子是他的儿子,所以可能有不公平的优势,但五就是五。

看看罗斯林。 我认为这可能是您正在寻找的。 它使您可以访问编译器AST,以及许多其他令人惊奇的东西!

http://blogs.msdn.com/b/visualstudio/archive/2011/10/19/introducing-the-microsoft-roslyn-ctp.aspx

除此之外,我建议写一本关于编译器的教科书。