编译原理课程设计报告_第1页
编译原理课程设计报告_第2页
编译原理课程设计报告_第3页
编译原理课程设计报告_第4页
编译原理课程设计报告_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

1、课 程 设 计 报 告 设计题目:一个简单文法的编译器前端的设计与实现班 级: 物联网1303班组长学号:20137704组长姓名:方俊超指导教师:肖桐设计时间:2014年12月设计分工组长学号及姓名:20137704 方俊超分工:语法分析器设计实现组员1学号及姓名:20137706 程国鹏分工:中间代码生成组员2学号及姓名:20137702 郝萌萌分工:扫描器设计实现摘 要本次课程设计主要是完成了编译前端的工作,一个编译程序前端的工作过程一般可以划分为四个阶段:词法分析、语法分析、语义分析与中间代码生成。每个阶段都是从上一个阶段得到结果,对他进行分析,并且根据一些外部环境(例如符号表等)得到

2、最终的输出结果。要构造一个编译程序,可以按照这样的阶段来分别构造,最后来连调。本次课设的词法分析主要完成两个任务,识别单词和翻译单词。根据用户输入的源程序,有限自动机所识别出的对象完成从单词串到单词的TOKEN串的翻译。语法分析和中间代码主要采用递归下降子程序法。实现了语法的正确分析,最终生成了四元式序列。关键字:编译原理,词法分析,语法分析,中间代码生成目 录 摘要1. 概述 2. 课程设计任务及要求 2.1 设计任务 2.2 设计要求3. 算法及数据结构 3.1算法的总体思想(流程) 3.2词法分析模块 3.2.1 功能3.2.2 数据结构 3.2.3 算法 3.3 语法分析模块模块 3.

3、3.1功能3.3.2 数据结构 3.3.3算法 3.4目标代码生成模块 3.4.1 功能3.4.2 数据结构 3.4.3 算法4. 程序设计与实现 4.1 程序流程图 4.2 程序说明 4.3 实验结果5. 结论6. 参考文献。7. 收获、体会和建议。 1. 概 要本次课程设计主要是完成了编译前端的工作,一个编译程序前端的工作过程一般可以划分为四个阶段:词法分析、语法分析、语义分析与中间代码生成。每个阶段都是从上一个阶段得到结果,对他进行分析,并且根据一些外部环境(例如符号表等)得到最终的输出结果。要构造一个编译程序,可以按照这样的阶段来分别构造,最后来连调。本次课设的词法分析主要完成两个任务

4、,识别单词和翻译单词。根据用户输入的源程序,有限自动机所识别出的对象完成从单词串到单词的TOKEN串的翻译。语法分析和中间代码主要采用递归下降子程序法。实现了语法的正确分析,最终生成了四元式序列。2. 课程设计任务及要求2.1设计任务编译原理课程兼有很强的理论性和实践性,是计算机专业的一门非常重要的专业基础课程,在系统软件中占有十分重要的地位。编译原理课程设计是本课程重要的综合实践教学环节,是对平时实验的一个补充。通过编译器相关子系统的设计,使学生能够更好地掌握编译原理的基本理论和编译程序构造的基本方法和技巧,融会贯通本课程所学专业理论知识;培养学生独立分析问题、解决问题的能力,以及系统软件设

5、计的能力;培养学生的创新能力及团队协作精神。在下列内容中任选其一:1、一个简单文法的编译器前端的设计与实现。2、一个简单文法的编译器后端的设计与实现。3、一个简单文法的编译器的设计与实现。4、自选一个感兴趣的与编译原理有关的问题加以实现,要求难度相当。2.2设计要求1、在深入理解编译原理基本原理的基础上,对于选定的题目,以小组为单位,先确定设计方案;2、设计系统的数据结构和程序结构,设计每个模块的处理流程。要求设计合理;3、编程序实现系统,要求实现可视化的运行界面,界面应清楚地反映出系统的运行结果;4、确定测试方案,选择测试用例,对系统进行测试;5、运行系统并要通过验收,讲解运行结果,说明系统

6、的特色和创新之处,并回答指导教师的提问;6、提交课程设计报告。3. 算法及数据结构3.1算法的总体思想(流程)1、 词法分析(1) 扫描器作为独立一遍的扫描器 源程序 TOKEN序列 (字符串) (单词串)(2) 自动机其中:(字母) d(数字) ?(空格、换符、回车),需要滤掉 (泛指单词的后继符) .(表示省略了其他界符的处理)(3) 关键字表单词编码program3var4integer5begin6if7else8do9while10end11(4) 界符表界符编码,13:14;15:=16(1718)19=20+21*22-23/2425标识符用编码1表示,常数用编码2表示2、 语法

7、分析3、 中间代码生成3.2词法分析模块3.2.1功能词法分析模块主要是在源程序中切出单词,生成Token序列,为之后语法分析、语义分析做准备。即(1) 识别单词 从用户的源程序中把单词分离出来;(2) 翻译单词 把单词转换成机内表示,便于后续处理。3.2.2 数据结构char ch; /当前字符char strToken; /当前单词char *keywords =“program”, “procedure”, “begin”,; /关键字表、界符表char ID; /符号表int Cons; /常数表struct TokenType int code,value; struct Token

8、Type Token; /Token数组3.2.3算法Step 1: 初始化;Step 2: 滤除空格,读取第一个非空字符到ch;Step 3: if (ch是一个字母) Step 4: 处理关键字或标识符; Step 5: else if (ch是一个数字) Step 6: 处理常数; else Step 7: 处理界符或错误处理;3.3语法分析模块 3.3.1功能 3.3.2 数据结构 3.3.3算法 3.4目标代码生成模块 3.4.1 功能3.4.2 数据结构 3.4.3 算法4. 程序设计与实现 4.1 程序流程图 4.2 程序说明(1) 词法分析(扫描器)#include#inclu

9、de#include#include#includeusing namespace std;char *kt9=program,var,integer,begin,if,else,do,while,end,TOKEN120,ch; /kt关键字char*pt13=,:,;,:=,(,),=,+,*,-,/,; /pt界符typedef struct /存储标识符char it100;IT;IT it100; /it标识符typedef struct /存储常数char ct100; /ct常数CT;CT ct100;int n,L; /n表示标识符的最后一个位置 /L表示常数的最后一个位置in

10、t search(char *TOKEN) /关键字匹配函数 int a,b; for(b=0;b=9;b+) if(a=strcmp(TOKEN,ktb)=0) return b+4; return 0; int searchit(char *TOKEN) /标识符匹配函数 int a,b; for(b=0;bn;b+) if(a=strcmp(TOKEN,itb.it)=0) return b; return -1; int searchnum(char *TOKEN) int a,b; /常数匹配函数 for(b=0;bL;b+) if( a=strcmp(TOKEN,ctb.ct)=0

11、) return b; return -1;void out(char *TOKEN, int in) /输出函数 cout(TOKEN,in:out(TOKEN,18); break; case):out(TOKEN,19); break; case=:out(TOKEN,20); break; case+:out(TOKEN,21); break; case*:out(TOKEN,22); break; case-:out(TOKEN,23); break; case/:out(TOKEN,24); break; case:out(TOKEN,25); break; int main()

12、/主函数 FILE *fp; if(fp=fopen(E:hmmsource.txt,r)=NULL) fprintf(stderr,error opening.n); exit(1); cout关键字:; /识别关键字for(int j = 0;j9;j+)coutktj ;coutendl; cout界 符:; /识别界符 for(int i = 0;i13;i+) coutpti ; coutendl;cout标识符:; /识别标识符for (int m=0;mn;m+)cout itm.it,;coutendl; cout常 数:; /识别常数 for (int k=0;kL;k+)

13、cout ctk.ct ; coutendl; cout扫描结果:endl ; do ch=fgetc(fp); if(ch=#) break; if(ch= ) scanner(fp); else fseek(fp,-1,1); scanner(fp); while(ch!=#); return 0;(2) 语法分析(3) 中间代码生成 4.3 实验结果(1) 词法分析(扫描器)(2) 语法分析(3) 中间代码生成5. 结论6. 参考文献1、陈火旺.程序设计语言编译原理(第3版). 北京:国防工业出版社.2000.2、美 Alfred V.Aho Ravi Sethi Jeffrey D. Ullman著.李建中,姜守旭译.编译原理.北京:机械工业出版社.2003.3、美 Kenneth C.Louden著.冯博琴等译.编译原理及实践.北京:机械工业出版社.2002.4、金成植著.编译程序构造原理和实现技术. 北京:高等教育出版社. 2002.7. 收

温馨提示

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

评论

0/150

提交评论