Pinkman

导航

2013年9月28日 #

从头学习compiler系列6——句法分析

摘要: 句法分析,也就是语义分析。一段代码不但要符合语法的规则,也要符合语义。比如c语言中,a = 1; 这个语句没有语法问题,如果变量a在之前没有定义,那么就属于语义错误。又如 a = b; a是int型,b是结构体,那么也属于语义错误,类型不匹配。下面列举一些Cool语言需要检测的语义错误。1,重名。类之间是否有重名;类继承树里面的函数是否有重名;类继承树里面的成员变量是否有重名。2,继承。类继承树中每个类是否有定义;如果没有继承,那么默认继承Object类;继承树中是否有环。3,未声明。使用一个变量前是否有定义。4,类型不匹配。如比较、算术计算、if条件、loop条件、函数返回值等需要类型匹配。 阅读全文

posted @ 2013-09-28 20:39 Pinkman 阅读(970) 评论(0) 推荐(0) 编辑

2013年7月9日 #

从头学习compiler系列5——bison实践

摘要: 如有错误,望君指正。1,bison简介参考wiki所知,bison是一个GNU自由软件,用于自动生成语法分析器。根据自定义的语法规则,你可以分析大部分语言的语法,小到桌面计算器,大到复杂的编程语言。想要全面了解bison各个部分,参考bison官方文档http://www.gnu.org/software/bison/manual/bison.html2,基础知识2.1 GLR 分析器bison确定性LR(1)算法在某一特定语法规则点上,不能决定这一步是归约还是移近。例如:expr: id | id '+' id;这样在第一个id的时候,不知道是归约还是移近'+' 阅读全文

posted @ 2013-07-09 01:10 Pinkman 阅读(7392) 评论(0) 推荐(1) 编辑

2013年6月3日 #

从头学习compiler系列4——flex实践

摘要: 1,flex简介flex是词法分析器(不是Adobe Flex)。它可以扫描一段文字,按照自定义的模式进行匹配,并执行相应的动作。说来抽象,下面准备用简单的例子来直接领略一下flex的风采。本文部分参考http://flex.sourceforge.net/manual/(flex词法分析手册),如果想全面了解flex,需要在本文后,详细阅读flex参考文档。2,事例课程(链接)自带的linux已经安装好了flex,如果你用自己的linux版本,那么需要yum或apt-get来安装。2.1 最简单一个最简单的可单独运行的程序,读入text文件,输出文件内容。very_easy.flex代码:h 阅读全文

posted @ 2013-06-03 19:52 Pinkman 阅读(2784) 评论(2) 推荐(0) 编辑

2013年5月14日 #

从头学习compiler系列3——COOL语言实践

摘要: 1,安装、运行根据课程的说明,我们首先下载Oracle VirtualBox(https://www.virtualbox.org/wiki/Downloads)。然后下载课程特地准备的linux环境的镜像文件(https://www.virtualbox.org/wiki/Downloads)。此linux环境包含了compiler课程的各个部分。运行VirtualBox,新建,选择linux ubuntu,打开镜像文件Compilers.vdi。设置好后,启动虚拟机。默认进入界面版本,有点类似windows。这里示范用命令行的操作。打开命令行终端,输入: (引号内)“cd cool/exa 阅读全文

posted @ 2013-05-14 22:20 Pinkman 阅读(2676) 评论(2) 推荐(0) 编辑

2013年3月12日 #

从头学习compiler系列2——COOL语言学习1

摘要: Cool语言是一个面向对象的语言。虽然比较小型,但也包含了许多现代语言的特性,如对象、强类型和自动化内存管理。如果你之前熟悉c++、java等面向对象语言,那么会很容易上手。学一门新语言,最急迫想知道的就是,如何编写“hello world”程序,下面就来尝个鲜。class Main inherits IO {main(): SELF_TYPE { out_string("Hello, World.\n") };};打眼一看,外形很像java,其实意思也很相近了。下面我来细细详谈。全文大部分翻译cool语言手册。1,类结构 classes 一个Cool程序是由许多的类组成, 阅读全文

posted @ 2013-03-12 00:10 Pinkman 阅读(5335) 评论(3) 推荐(0) 编辑

2013年3月4日 #

从头学习compiler系列1——前言

摘要: 我们在学校里学习编程,最开始接触到的是c语言。接触c语言的语法,在编译器里写代码,然后编译。或者是其它语言,c++、java、as等等,只是用的编译器不同,其实原理都是 一样。都是将源代码翻译成汇编类或底层代码,再由汇编器翻译成机器能识别的代码。编译器原理三大圣书,被人尊称为龙书、虎书、鲸书。三本都有中文翻译,大家可以选择其一进行参阅。此系列尽量包含编译器的各个部分的编写。 /*龙书、虎书、鲸书,可以去网上搜索,原名都不叫那个。因为书的封面印着龙、虎、鲸,故此得名。*/ 开源课的流行,也源于课程设计详尽,内容丰富。在12年开了一门compiler课程,我们就从这门开始学习。课程地址:http. 阅读全文

posted @ 2013-03-04 23:07 Pinkman 阅读(1263) 评论(0) 推荐(0) 编辑