编译器综合课程设计2014夏.doc_第1页
编译器综合课程设计2014夏.doc_第2页
编译器综合课程设计2014夏.doc_第3页
编译器综合课程设计2014夏.doc_第4页
编译器综合课程设计2014夏.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

编译器综合课程设计任务书计算机科学系2014.6一、设计目的与要求1.设计目的本次课程设计的时间为夏季小学期的4周,目的是通过构造一个完整的编译器,融汇贯通编译器的各个阶段:词法分析、语法分析、语义分析、中间代码生成、目标代码生成和代码优化等,使学生进一步了解和掌握编译程序构造的基本原理、技术和工具,同时培养学生计算思维和系统编程的能力,从而提高学生的综合能力。2.要求课程设计题目见“主要内容”,学生可以选择其中一个编译器进行实现。编程语言可选择C/C+或者Java,要求有用户图形界面,输入从文件读,输出存储在文件中。编译器生成后可以直接从源文件得到目标文件,也可以分别各个阶段的中间结果显示出来。每个学生要在规定时间内独立完成,通过测试并提交实验源代码、测试程序和实验报告。实验报告要求实验报告提交打印稿一份(A4幅面),内容如下: 实验名称、实验目的、实验步骤和内容(含系统功能模块图)、测试情况及结果、心得体会。注:实验报告电子版和程序清单(含源程序、测试用例及结果,源程序中主要变量和函数要求加注释)二、主要内容选题说明:可以从下列题目中任选一题。1. C-编译器设计 根据编译原理及实践附录A编译器设计方案,设计并实现C-编译器。提示:l 可在tiny编译器和TM虚拟机基础上进行修改l Tiny编译器及TM虚拟机的源代码在课程中心和编译原理及实践作者的主页可下载。l 使用递归下降分析方法时,可用EBNF先将文法改写为LL(1)文法。2. 改进型tiny编译器设计 对编译原理及实践中的tiny编译器进行改进,添加以下内容:(1) 数据类型,如:integer,float,boolean,char,string等;(2) 数组或结构体;(3) 函数。提示:l 添加数据类型和数组时可能需要考虑符号表l 添加函数时可能需要考虑符号表和运行时环境3. 改进型PL0编译器设计 根据参考文献1及课程中心上实验二提供的参考资料PL0编译器的实现文档.doc和PL0编译器设计与实现(参考).doc(含PL0源代码及说明),对PL0编译器进行改进,添加以下内容:(1) 数据类型或类;(2) 语句4.自选编译器,要求含表达式、常用控制流语句、语句序列、数据类型和函数。三、参考文献1陈火旺,刘春林,谭庆平,赵克佳,刘越编著.程序设计语言编译原理(第三版).北京:国防工业出版社,20012Kenneth C.Louden著,冯博琴等译.编译原理及实践.北京:机械工业出版社,20003Jobn Levine著、陆军译.flex与bison(中文版).南京:东南大学出版社,2011 4Alfred V.Aho,Ravi Sethi,Jeffrey D.Ullman著,赵建华,郑滔,戴新宇译.编译原理第2版.北京:机械工业出版社,2009年5月附录一、C惯用的词法1. 下面是语言的关键字:else if int return void while所有的关键字都是保留字,并且必须是小写。2. 下面是专用符号:+ - * / = = != = ; , ( ) /* */3. 其他标记是I D和N U M,通过下列正则表达式定义:ID = letter letter*NUM = digit digit*letter = a|.|z|A|.|Zdigit = 0|.|9小写和大写字母是有区别的。4. 空格由空白、换行符和制表符组成。空格通常被忽略,除了它必须分开I D、N U M关键字。5. 注释用通常的C语言符号/ * . . . * /围起来。注释可以放在任何空白出现的位置(即注释不能放在标记内)上,且可以超过一行。注释不能嵌套。二、C的语法和语义C的B N F语法如下:1. p ro g r a m d e c l a r a t i o n - l i s t2. d e c l a r a t i o n - l i s t d e c l a r a t i o n - l i s t d e c l a r a t i o n | d e c l a r a t i o n3. d e c l a r a t i o n v a r- d e c l a r a t i o n | f u n - d e c l a r a t i o n4. v a r- d e c l a r a t i o n t y p e - s p e c i f i e r I D ; | t y p e - s p e c i f i e r I D N U M ;5. t y p e - s p e c i f i e r i n t | v o i d6. f u n - d e c l a r a t i o n t y p e - s p e c i f i e r I D( p a r a m s ) | c o m p o u n d - s t m t7. p a r a m s p a r a m s-l i s t | v o i d8. p a r a m - l i s t p a r a m - l i s t , p a r a m | p a r a m9. p a r a m t y p e - s p e c i f i e r I D | t y p e - s p e c i f i e r I D 10. c o m p o u n d - s t m t l o c a l-d e c l a r a t i o ns s t a t e m e n t-l i s t 11. l o c a l-d e c l a r a t i o ns l o c a l-d e c l a r a t i o ns v a r- d e c l a r a t i o n | e m p t y12. s t a t e m e n t-l i s t s t a t e m e n t-l i s t s t a t e m e n t | e m p t y13. s t a t e m e n t e x p re s s i o n-s t m t | c o m p o u n d - s t m t | s e l e c t i o n - s t m t| i t e r a t i o n-s t m t | re t u r n-s t m t14. e x p re s s i o n-s t m t e x p re s s i o n ; | ;15. s e l e c t i o n - s t m t i f ( e x p re s s i o n ) s t a t e m e n t| i f ( e x p re s s i o n ) s t a t e m e n t e l s e s t a t e m e n t16. i t e r a t i o n -s t m t w h i l e ( e x p re s s i o n ) s t a t e m e n t17. re t u r n -s t m t return ;| r e t u r n e x p re s s i o n;18. e x p re s s i o n v a r = e x p re s s i o n | s i m p l e-e x p re s s i o n19. v a r I D | I D e x p re s s i o n 20. s i m p l e-e x p re s s i o n a d d i t i v e-e x p re s s i o n re l o p a d d i t i v e-e x p re s s i o n| a d d i t i v e -e x p re s s i o n21. re l o p = | | = | = = | ! =22. a d d i t i v e-e x p re s s i o n a d d i t i v e-e x p re s s i o n a d d o p t e r m | t e r m23. a d d o p + | -24. t e r m t e r m m u l o p f a c t o r | f a c t o r25. m u l o p * | /26. f a c t o r ( e x p re s s i o n ) | v a r | c a l l | N U M27. c a l l I D ( a rg s )28. a rg s a rg - l i s t | e m p t y29. a rg-l i s t a rg-list , e x p re s s i o n | e x p re s s i o n对以上每条文法规则,给出了相关语义的简短解释。1. p ro g r a m d e c l a r a t i o n - l i s t2. d e c l a r a t i o n - l i s t d e c l a r a t i o n - l i s t d e c l a r a t i o n | d e c l a r a t i o n3. d e c l a r a t i o n v a r- d e c l a r a t i o n | f u n - d e c l a r a t i o n程序由声明的列表(或序列)组成,声明可以是函数或变量声明,顺序是任意的。至少必须有一个声明。接下来是语义限制(这些在C中不会出现)。所有的变量和函数在使用前必须声明(这避免了向后b a c k p a t c h i n g引用)。程序中最后的声明必须是一个函数声明,名字为m a i n。注意,C缺乏原型,因此声明和定义之间没有区别(像C一样)。4. v a r- d e c l a r a t i o n t y p e - s p e c i f i e r I D ; | t y p e - s p e c i f i e r I D NUM ;5. t y p e - s p e c i f i e r i n t | v o i d变量声明或者声明了简单的整数类型变量,或者是基类型为整数的数组变量,索引范围从0到N UM -1。注意,在C中仅有的基本类型是整型和空类型。在一个变量声明中,只能使用类型指示符i n t。v o i d用于函数声明(参见下面)。也要注意,每个声明只能声明一个变量。6. f u n - d e c l a r a t i o n t y p e - s p e c i f i e r I D ( p a r a m s )c o m p o u n d - s t m t7. p a r a m s p a r a m - l i s t | v o i d8. p a r a m-l i s t p a r a m - l i s t , p a r a m | p a r a m9. p a r a m t y p e - s p e c i f i e r I D | t y p e - s p e c i f i e r I D 函数声明由返回类型指示符、标识符以及在圆括号内的用逗号分开的参数列表组成,后面跟着一个复合语句,是函数的代码。如果函数的返回类型是v o i d,那么函数不返回任何值(即是一个过程)。函数的参数可以是v o i d (即没有参数),或者一列描述函数的参数。参数后面跟着方括号是数组参数,其大小是可变的。简单的整型参数由值传递。数组参数由引用来传递(也就是指针),在调用时必须通过数组变量来匹配。注意,类型“函数”没有参数。一个函数参数的作用域等于函数声明的复合语句,函数的每次请求都有一个独立的参数集。函数可以是递归的(对于使用声明允许的范围)。10. c o m p o u n d - s t m t l o c a l-d e c l a r a t i o ns s t a t e m e n t-l i s t 复合语句由用花括号围起来的一组声明和语句组成。复合语句通过用给定的顺序执行语句序列来执行。局部声明的作用域等于复合语句的语句列表,并代替任何全局声明。11. l o c a l-d e c l a r a t i o ns l o c a l-d e c l a r a t i o ns v a r- d e c l a r a t i o n | e m p t y12. s t a t e m e n t-l i s t s t a t e m e n t-l i s t s t a t e m e n t | e m p t y注意声明和语句列表都可以是空的(非终结符e m p t y表示空字符串,有时写作。)13. s t a t e m e n t e x p re s s i o n-s t m t| c o m p o u n d - s t m t| s e l e c t i o n - s t m t| i t e r a t i o n-s t m t| re t u r n-s t m t14. e x p re s s i o n-s t m t e x p re s s i o n; |;表达式语句有一个可选的且后面跟着分号的表达式。这样的表达式通常求出它们一方的结果。因此,这个语句用于赋值和函数调用。15. s e l e c t i o n - s t m t i f (e x p re s s i o n) s t a t e m e n t| i f (e x p re s s i o n) s t a t e m e n t e l s e s t a t e m e n ti f语句有通常的语义:表达式进行计算;非0值引起第一条语句的执行; 0值引起第二条语句的执行,如果它存在的话。这个规则导致了典型的悬挂e l s e二义性,可以用一种标准的方法解决:e l s e部分通常作为当前i f的一个子结构立即分析(“最近嵌套”非二义性规则)。16. i t e r a t i o n-s t m t w h i l e (e x p re s s i o n) s t a t e m e n tw h i l e语句是C中唯一的重复语句。它重复执行表达式,并且如果表达式的求值为非0,则执行语句,当表达式的值为0时结束。17. re t u r n -s t m t return ;| r e t u r n e x p re s s i o n;返回语句可以返回一个值也可无值返回。函数没有说明为v o i d就必须返回一个值。函数声明为v o i d就没有返回值。r e t u r n引起控制返回调用者(如果它在m a i n中,则程序结束)。18. e x p re s s i o n v a r = e x p re s s i o n | s i m p l e-e x p re s s i o n19. v a r I D | I D e x p re s s i o n表达式是一个变量引用,后面跟着赋值符号(等号)和一个表达式,或者就是一个简单的表达式。赋值有通常的存储语义:找到由v a r表示的变量的地址,然后由赋值符右边的子表达式进行求值,子表达式的值存储到给定的地址。这个值也作为整个表达式的值返回。v a r是简单的(整型)变量或下标数组变量。负的下标将引起程序停止(与C不同)。然而,不进行下标越界检查。v a r表示C比C的进一步限制。在C中赋值的目标必须是左值(l - v a l u e),左值是可以由许多操作获得的地址。在C中唯一的左值是由v a r语法给定的,因此这个种类按照句法进行检查,代替像C中那样的类型检查。故在C中指针运算是禁止的。20. s i m p l e-e x p re s s i o n a d d i t i v e-e x p re s s i o n re l o p a d d i t i v e-e x p re s s i o n| a d d i t i v e -e x p re s s i o n21. re l o p = | | = | = = |! =简单表达式由无结合的关系操作符组成(即无括号的表达式仅有一个关系操作符)。简单表达式在它不包含关系操作符时,其值是加法表达式的值,或者如果关系算式求值为t u r e,其值为1,求值为f a l s e时值为0。22. a d d i t i v e-e x p re s s i o n a d d i t i v e-e x p re s s i o n a d d o p t e r m | t e r m23. a d d o p + |

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论