编译原理课程设计报告简单文法的编译器的设计与实现大学论文.doc
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《编译原理课程设计报告简单文法的编译器的设计与实现大学论文.doc》由会员分享,可在线阅读,更多相关《编译原理课程设计报告简单文法的编译器的设计与实现大学论文.doc(60页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、课 程 设 计 报 告 设计题目:简单文法的编译器的设计与实现班 级:XX组长学号:XXX组长姓名:XX指导教师:XX设计时间:2017年1月设计分工组长学号及姓名: 20143710 李万分工:语法分析,生成符号表,语义分析,中间代码生成(四元式),汇编代码生成组员1学号及姓名:20143724张太分工:部分语法分析组员2学号及姓名:20143725 张天宝分工:部分语义分析组员3学号及姓名:20143722张俊杰 摘 要 编译原理是计算机科学与技术专业一门重要的专业课,它具有很强的理论性与实践性,目的是系统地向学生介绍编译系统的结构、工作原理以及编译程序各组成部分的设计原理和实现技术,在计
2、算机本科教学中占有十分重要的地位。计算机语言之所以能由单一的机器语言发展到现今的数千种高级语言,就是因为有了编译技术。编译技术是计算机科学中发展得最迅速、最成熟的一个分支,它集中体现了计算机发展的成果与精华。 本课设是词法分析、语法分析、语义分析的综合,外加上扩展任务中间代码的优化和目标代码的生成,主要是锻炼学生的逻辑思维能力,进一步理解编译原理的方法和步骤。关键词:编译原理,前端,目标代码,后端60 目 录摘要.3 1. 概述.6 2. 课程设计任务及要求.7 2.1 设计任务.7 2.2 设计要求.8 3. 算法及数据结构.9 3.1算法的总体思想.10 3.2 词法分析器模块.11 3.
3、2.1 功能.11 3.2.2 数据结构.11 3.2.3 算法.12 3.3 语法分析器模块.14 3.3.1功能.14 3.3.2 数据结构.14 3.3.3算法.15 3.4 语义分析中间代码生成.18 3.4.1 功能.18 3.4.2 数据结构.18 3.4.3 算法.203.5 目标代码生成器模块.23 3.5.1功能.23 3.5.2 数据结构.23 3.5.3 算法.25 4. 程序设计与实现.26 4.1 程序流程图.26 4.2 程序说明.27 4.3 实验结果.325. 结论.596. 参考文献.60 7. 收获、体会和建议.61 1 概述 编译程序(compiler)是
4、把某一种高级语言程序等价地转换成另一种低级语言程序(如汇编语言或机器语言程序)的程序。几乎所有形式的计算都要用到编译器。程序运行的过程图如下图所示:高级语言程序机器语言程序编译程序翻译运行结果程序运行过程编译程序的工作一般分为以下几个阶段:词法分析、语法分析、语义分析、中间代码产生、代码优化、目标代码产生。语法分析器语义分析与中间代码生成器优化段目标代码生成器词法分析器语法单位四元式四元式目标代码单词符号 2 课程设计任务及要求2.1 设计任务任务内容:1.定义一个简单程序设计语言文法(包括变量说明语句、算术运算表达式、赋值语句;If语句、While语句等)支持函数调用,函数递归,支持传参和传
5、值2.扫描器设计实现;3.语法分析器设计实现;4.中间代码设计;5.中间代码生成器设计实现;6.生成目标代码。 文法:给出的文法具有左递归,消除左递归后得到的文法如下所示: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 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
6、 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 DNUM 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, p a r
7、a m9. p a r a m t y p e - s p e c i f i e r I D 10. compound - 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 empty v a r- d e c l a r a t i o n 12. s t a t e m e n t-l i s t emptys t a t e m e n t 13. s t a t e m e n t e x p re s s i o n-s t
8、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 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
9、 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 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 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
10、t i v e-e x p re s s i o n21. re l o p = | | = | = = | ! =22. add i t i v e-e x p re s s i o n termaddop te r m23. add p + | -24. t erm f a c t o r m u l o p f a c t o r25. mulop * | /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
11、| e m p t y29. a rg-l i s t e x p re s s i o n , e x p re s s i o n 2.2 设计要求 通过设计C-语言的编译器,了解编译器在程序设计中的功能,以及编译过程中的翻译步骤,对编译原理的各个部分有一个深入的了解和学习。 3 算法及数据结构 3.1 算法的总体思想 如下流程图: 出 错 处 理 符 号 表 词法分析器 源程序 语法分析器 单词符号 语义分析及中间代码产生器 语法单位 中间代码 目标代码生成器 中间代码 目标代码3.2 词法分析器模块 3.2.1 功能根据给出的C-语言词法、语法和语义,设计一个编译器。1. 下面是语言的
12、关键字:else if int return void while ,write,read.所有的关键字都是保留字,并且必须是小写。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语言符号/ * . . . * /围起来。注释
13、可以放在任何空白出现的位置(即注释不能放在标记内)上,且可以超过一行。注释不能嵌套。 3.2.2 数据结构 定义了一个枚举类型TokenType,枚举了一些关键字和其他一些词法中的符号。typedef enum TokenType IF,ELSE,ID,NUM,PLUS,MINUS,.TokenType;记号有若干种,其中包括保留字,如IF 和THEN;特殊符号,如算术符号加(PLUS)和减(MINUS);多字符串的记号,如NUM和ID。作为逻辑项的记号必须与它们所表示的字符串完全区分开来。函数getToken():它消耗输入字符并根据构造的DFA返回下一个被识别的记号。这个实现利用了双重嵌套
14、情况分析,以及一个有关状态的大型情况列表。在大列表中的是基于当前输入字符的单独列表。扫描程序的状态也被定义为一个枚举类型StateType。扫描程序还需总地计算出每个符号的特性,并且有时会采取其他动作。在此扫描程序中,所需计算的唯一特性是词法或是被识别的记号的串值,它位于变量tokenString之中,并一同提供给编译器其他部分。reservedLookup():实现识别的标识符之后保留字的查找。标志变量save用来指示是否将一个字符增加到tokenString之上。getNextChar(): 读取程序中的下一个字符。printToken():根据此法分析的token,把结果输入到文件里。数
15、与标识符的识别要求从INNUM和INID到最终状态的转换应该是非消耗的,通过提供一个ungetNextchar过程,在输入缓冲区中反填一个字符来完成这一任务。 3.2.3 算法对源程序字符流进行扫描和分解,识别出一个个单词符号。描述工具:有限自动机基本字识别: 需要超前搜索才能确定哪些是基本字标识符识别:字母开头的字母数字串,后跟界符或算符常数识别:识别出算术常数并将其转变为二进制内码表示。有些也要超前搜索算符和界符的识别:把多个字符符合而成的算符和界符拼合成一个单一单词符号。对于正则表达式ID = letter letter*,其有限自动机如下所示:1Letter2Letter对于词法分析过
16、程,均可以把词法的规则构造成如上所示的。根据给出的词法定义,得到如下图所示的DFA:DFA状态图由此DFA图,得到该词法分析的伪代码: state := START;ch : = next input character;while not Acceptstate and not error(state) donewstate:=Tstate,ch;if Advancestate,ch then ch:=next input char;state:= newstate;end while;if Acceptstate then accept;3.3语法分析器模块 3.3.1功能:在词法分析的基
17、础上,根据语言的语法规则把单词符号串分解成各类语法单位。3.3.2 数据结构必须将树节点的属性保留如下:每一种表达式节点都需要一个特殊的属性。常数节点需要它所代表的整型常数的域;标识符节点应该包括了标识符名称的域;而算符节点则需要包括了算符名称的域。定义了树节点TreeNode的结构体:typedef struct treeNode struct treeNode * childMAXCHILDREN; struct treeNode * father; struct treeNode * sibling; int lineno; NodeKind nodekind; union StmtKi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 课程设计 报告 简单 文法 编译器 设计 实现 大学 论文
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内