编译原理 c语言编译器的设计与实现

编译原理 c语言编译器的设计与实现

ID:5989622

大小:93.00 KB

页数:9页

时间:2017-12-30

编译原理 c语言编译器的设计与实现_第1页
编译原理 c语言编译器的设计与实现_第2页
编译原理 c语言编译器的设计与实现_第3页
编译原理 c语言编译器的设计与实现_第4页
编译原理 c语言编译器的设计与实现_第5页
资源描述:

《编译原理 c语言编译器的设计与实现》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、实验题目C语言编译器的设计与实现小组合作否姓名班级11级专升本学号一、实验目的:1、了解语法编译器的内部工作原理,通过在本次实验中运用一定的编程技巧,掌握对表达式进行处理的一种方法。2、加深对语法编译器工作过程的理解;加强对递归下降法实现语法分析程序的掌握;能够采用一种编程语言实现简单的语法分析程序;能够使用自己编写的分析程序对简单的程序段进行语法翻译。二、实验环境:需要一台拥有WINDOWSXP的计算机。三、实验步骤:我们设计的编译程序涉及到编译五个阶段中的三个,即词法分析器、语法分析器和中间代码生成器。编译程序的输出结果包括词法分析后的二元式序列、变量名表、状态栈分析过程显示

2、及四元式序列程序,整个编译程序分为三部分:(1)词法分析部分(2)语法分析处理及四元式生成部分(3)输出显示部分编译程序中涉及到的数据结构说明如下:charch='';/*从字符缓冲区中读取当前字符*/intcount=0;/*词法分析结果缓冲区计数器*/staticcharspelling[10]={""};/*存放识别的字*/staticcharline[81]={""};/*一行字符缓冲区(最多80个字符)*/char*pline;/*字符缓冲区指针*/staticcharntab1[100][10];/*变量名表:共100项,每项长度为10*/structntab{i

3、nttc;/*真值*/intfc;/*假值*/}ntab2[200];/*在布尔表达式)中保存有关布尔变量的真、假值*/intlabel=0;/*指向ntab2的指针*/structrewords{charsp[10];intsy;};/*匹配表的结构,用来与输入缓冲区中的单词进行匹配*/structrewordsrewords[8]={{"if",syl_if},{"else",syl_else},{"while",syl_while},{"{",syl_begin},{"}",syl_end},{"&&",op_and},{"

4、

5、",op_or},{"!",op_not}};

6、/*匹配表初始化,大小为8*/structaa{intsyl;/*存放名字*/intpos;/*存放名字所对应的值*/}buf[100],/*词法分析结果缓冲区*/n,/*读取二元式的当前字符*/n1,/*当前表达式中的字符*/E,/*非终结符*/sstack[100],/*算术或布尔表达式加工处理使用的符号栈*/ibuf[100],/*算术或布尔表达式使用的缓冲区*/stack[1000];/*语法分析加工处理使用的符号栈*/structaaoth;/*四元式中空白位置*/structfourexp{charop[10];structaaarg1;structaaarg2;in

7、tresult;}fexp[200];/*四元式的结构定义*/intssp=0;/*指向sstack栈指针*/structaa*pbuf=buf;/*指向词法分析缓冲区的指针*/intnlength=0;/*词法分析中记录单词的长度*/inttt1=0;/*变量名表指针*/FILE*cfile;/*源程序文件,~为结束符*/intlnum=0;/*源程序行数记数*/intsign=0;/*sign=0为赋值语句;sign=1为while语句;sign=3为if语句*/intnewt=0;/*临时变量计数器*/intnxq=100;/*nxq总是指向下一个将要形成的四元式地址,每次

8、执行gen()时,地址自动增1*/intlr;/*扫描LR分析表1过程中保存的当前状态值*/intlr1;/*扫描LR分析表2或表3所保存的当前状态值*/intsp=0;/*查找LR分析表时状态栈的栈顶指针*/intstack1[100];/*状态栈1定义*/intsp1=0;/*状态栈1的栈顶指针*/intnum=0;/*算术或布尔表达式缓冲区指针*/structll{intnxq1;/*记录下一条四元式的地址*/inttc1;/*真值链*/intfc1;/*假值链*/}labelmark[10];/*记录语句嵌套层次的数组,即记录嵌套中每层的布尔表达式e的首地址*/intla

9、beltemp[10];/*记录语句嵌套层次的数组,即记录每一层else之前的四元式地址*/intpointmark=-1;/*labelmark数组指针*/intpointtemp=-1;/*labeltemp数组指针*/五.编译程序运行测试测试source.dat得源程序如下:while(a>b){if(m>=n)a=a+1;elsewhile(k==h)x=x+2;}#~经编译程序运行后得到的输出结果如下:1)词法分析得出的相应的名字的号码和他的值2)列举程序中所有的变量3

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。