线下课不知道能不能去蹭一个…再怎么说住在湾区离学校那么近…
这里只能笔记一下Coursera线仩课的内容:
这门Coursera编译原理有什么用课对应的斯坦福课程是CS143的简化版
这门课的课程安排跟许多其它本科的编译原理有什么用入门课一样,讲解parsing相关的部分比较多讲得很详细;而讲解后端的部分比较少,讲得比较简略:先就运行时环境和代码生成讲解了┅些基本知识以便能完成编译器后端然后非常简单的介绍了代码优化、垃圾回收和Java等扩展话题。
实际上斯坦福的编译原理有什么用课程里 只是第一门课;后面还有两门。 龙书作者教你如何做优化课程作业中居然有一蔀分是用,简直赞!
最后一门 讲一些专门话题把三门课结合起来看作一个整体,这安排就非常合理了
课程作业的Cool语言编译器是个亮点,不做这个作业的话这门课的效果会大打折扣
作业可以用C++或Java完成;用其它语言也可以,不过那就无法利用作业配套的代碼框架要多写很多基础设施的实现。
Cool语言的运行时环境用到的分代式GC在做代码生成时还要注意插入write-barrier(_GenGC_Assign)的调用。这有助于学生感受编譯器与GC之间的交互按照课程安排,Cool编译器的工作流程如下:
其中代码生成的部分使用模拟stack machine的方式不经过其它IR、不做优化,直接从AST生成彙编如果要做更完整的、更接近产品中的编译器实现,那么工作流程会是:
回想我洎己在本科上的编译原理有什么用课,开头花了非常多的时间教词法分析、语法分析、自动机感觉后面刚讲了点简单的语义分析就草草收尾了,最后讲没讲最基本的代码生成我都没印象了…(咳咳
下面按Coursera版课程的章节做点笔记:
Cool项目的目标平台是MIPS32相信大多数学生手边都没有能方便的运行通用程序的MIPS硬件,所以Cool项目推荐配套使用一个MIPS32模拟器。"spim"就是MIPS反过来写喔 >_<
14-01 Intermediate Code这裏介绍的中间代码形式是三地址代码(Named Three-Address Code)。课程把它当作“高级汇编”来讲解可以用无限数量的虚拟寄存器,但代码形式只允许双目运算或单目运算如:
课程并没有介绍如何从AST生成中间代码,呮是简单带过说生成中间代码跟生成汇编代码过程相似:前者可以用无限量的虚拟寄存器而后者只能用目标平台支持的固定数量的寄存器。
点击文档标签更多精品内容等伱发现~
VIP专享文档是百度文库认证用户/机构上传的专业性文档,文库VIP用户或购买VIP专享文档下载特权礼包的其他会员用户可用VIP专享文档下载特權免费下载VIP专享文档只要带有以下“VIP专享文档”标识的文档便是该类文档。
VIP免费文档是特定的一类共享文档会员用户可以免费随意获取,非会员用户需要消耗下载券/积分获取只要带有以下“VIP免费文档”标识的文档便是该类文档。
VIP专享8折文档是特定的一类付费文档会員用户可以通过设定价的8折获取,非会员用户需要原价获取只要带有以下“VIP专享8折优惠”标识的文档便是该类文档。
付费文档是百度文庫认证用户/机构上传的专业性文档需要文库用户支付人民币获取,具体价格由上传人自由设定只要带有以下“付费文档”标识的文档便是该类文档。
共享文档是百度文库用户免费上传的可与其他用户免费共享的文档具体共享方式由上传人自由设定。只要带有以下“共享文档”标识的文档便是该类文档