Vin*_*hak 12 c# abstract-syntax-tree
我在互联网上搜索了一些有关开发C#抽象语法树的新手信息,但我只能找到已经"知道"的人的信息.我是一个业务线应用程序开发人员,所以这些主题有点过头了,但这是我自己的教育,所以我愿意花时间学习任何必要的概念.
通常,我想了解从代码字符串开发代码的抽象表示背后的技术.更具体地说,我希望能够使用此AST来执行C#语法突出显示.(我意识到语法高亮并不需要AST,但这似乎是学习一些"编译器"级技术的好机会.)
如果这个问题有点宽泛,我很抱歉,但我不知道该怎么回答.
谢谢!
Ira*_*ter 17
首先,您需要了解解析的内容以及树的抽象语法.为此,您可以首先查看抽象语法树上的Wikipedia.
您真的需要花一些时间使用编译器教科书来理解抽象语法树如何与解析相关,并且可以在解析时构建; 经典的参考文献是Aho/Ullman/Sethi的"编制者"一书(很容易在网上找到).您可以找到SO答案是否有任何"有趣"的方式来学习语言,语法,解析和编译器?启发.
一旦你理解了如何为简单的语法构建AST,你就可以将注意力转向像C#这样的东西.这里的问题是规模庞大; 用20种语法规则玩玩具语言是一回事.使用几百或一千条规则的语法是另一种方法.小经验将使人们更容易理解大的如何组合,以及如何与他们共处.
您可能不希望构建自己的C#语法(或实现C#标准中的语法); 它做了很多工作.您可以获得可用于提供C#AST的工具(Roslyn已被提及; ANTLR有一个C#解析器,还有更多).
确实,您可以使用AST进行语法突出显示(尽管这可能会使用大锤杀死一个gnat).大多数人没有太多考虑(但编译器书籍强调),就是你拥有AST之后会发生的事情; 大多数情况下他们自己都没用.你真的需要更多的机器来做任何有趣的事情.而不是一遍又一遍地重复(我一直看到同样的问题),你可以看到我对解析后的生活的讨论了解更多细节.
您可能应该看一下Phil Trelford的演讲:
这个人是个天才,会让您精疲力尽以了解编译器。他从字面上很容易地解释了一个五岁的孩子。有问题的五岁是他的儿子,所以可能有不公平的优势,但五岁就是五岁。
| 归档时间: |
|
| 查看次数: |
14165 次 |
| 最近记录: |