随笔- 60  文章- 0  评论- 1248  阅读- 67万 
07 2011 档案
自己动手开发编译器(十一)语义分析
摘要:上回我们已经用VBF的Parsers.Combinators库生成了miniSharp的语法分析器,并且能够将miniSharp的源代码翻译成抽象语法树(AST)。这一回我们要继续进行下一步——语义分析。就目前大家接触的编程语言,如C#、VB、C++来说,语义分析是编译器前端最复杂的部分。因为这些编程语言的语义都非常复杂。语义分析不像之前词法分析、语法分析那样,有一些特定的工具来帮助。这一部分通常... 阅读全文
posted @ 2011-07-22 11:15 装配脑袋 阅读(21346) 评论(15) 推荐(15) 编辑
自己动手开发编译器(十)miniSharp语法分析器
摘要:经过前面四篇的铺垫,我们终于拥有了编写语法分析器的强大工具,现在可以正式开发一门编程语言的语法分析器了。我们先来定义miniSharp的语法规则,然后根据LL文法的特点进行一些调整,最后借助解析器组合子生成完整的语法分析器。 miniSharp语言是C#的一个小子集,然而它仍然具有一门完整编程语言的所有要素,而且仍然是一种面向对象的语言。我们把miniSharp的语法分成三类——声明结构、语句和... 阅读全文
posted @ 2011-07-08 01:19 装配脑袋 阅读(15108) 评论(23) 推荐(17) 编辑
自己动手开发编译器(九)CPS风格的解析器组合子
摘要:上回我们用函数式编程的方法,结合Linq语法,建立了一套解析器组合子方案,并能成功解析自定义文法的输入字符串。但是,上次做成的解析器组合子有个重要的功能没有完成——错误报告。作为编程语言的语法分析器,不能在遇到语法错误的时候简单地返回null,那样程序员就很难修复代码中的语法错误。我们需要的是准确报告语法错误的位置,更进一步,是程序中所有的语法错误,而不仅仅是头一个。后者要求解析器具有错误恢复的能... 阅读全文
posted @ 2011-07-03 22:16 装配脑袋 阅读(14579) 评论(13) 推荐(10) 编辑

点击右上角即可分享
微信分享提示