小型编译程序高级语言到四元式的编译.doc

小型编译程序高级语言到四元式的编译.doc

ID:58662904

大小:73.00 KB

页数:23页

时间:2020-10-15

小型编译程序高级语言到四元式的编译.doc_第1页
小型编译程序高级语言到四元式的编译.doc_第2页
小型编译程序高级语言到四元式的编译.doc_第3页
小型编译程序高级语言到四元式的编译.doc_第4页
小型编译程序高级语言到四元式的编译.doc_第5页
资源描述:

《小型编译程序高级语言到四元式的编译.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、小型编译程序:高级语言到四元式的编译#include"stdio.h"/*如果使用TC的话,需要配置头文件路径*/#include"string.h"#defineACC-2/************************/#definesy_if0#definesy_then1#definesy_else2#definesy_while3#definesy_begin4#definesy_do5#definesy_end6#definea7#definesemicolon8#definee9#defi

2、nejinghao10#defineS11#defineL12#definetempsy15#defineEA18/*Eand*/#defineE019/Eor*/#defineplus34#definetimes36#definebecomes38#defineop_and39#defineop_or40#defineop_not41#definerop42#definelparent48#definerparent49#defineident56#defineintconst57/**********

3、***********************/charch='';/*从字符缓冲区读取当前字符*/intcount=0;/*词法分析结果缓冲区计数器*/staticcharspelling[10]={""};/*存放识别的字*/staticcharline[81]={""};/*一行字符缓冲区,最多80个字符*/char*pline;/*字符缓冲区指针*/staticcharntab1[100][10];/*变量名表,共100项,每项长度10*/structntab{inttc;/*真值*/intf

4、c;/*假值*/}ntab2[200];/*在布尔表达式E中保存有关布尔变量的真、假值*/intlabel=0;/*指向ntab2的指针*/structrwords{/*存放临时变量的表的定义*/charsp[10];intsy;};/*(保留字表)匹配表的结构,用来与输入缓冲区中的单词进行匹配*//*匹配表初始化,大小为10*/structrwordsreswords[10]={{"if",sy_if},{"do",sy_do},{"else",sy_else},{"while",sy_while},{

5、"then",sy_then},{"begin",sy_begin},{"end",sy_end},{"and",op_and},{"or",op_or},{"not",op_not}};structaa{intsy1;/*存放名字*/intpos;/*存放名字所对应的地址*/}buf[1000],/*词法分析结果缓冲区*/n,/*读取二元式的当前字符*/n1,/*当前表达式中的字符*/E,/*非终结符*/sstack[100],/*算术或布尔表达式加工处理使用的符号栈*/ibuf[100],/*算术或布

6、尔表达式使用的缓冲区*/stack[1000];/*语法分析加工处理使用的符号栈*/structaaoth;/*四元式中空白位置*/structfourexp{charop[10];structaaarg1;structaaarg2;intresult;}fexp[200];/*四元式的结构定义*/intssp=0;/*指向sstack栈指针*/structaa*pbuf=buf;/*指向词法分析缓冲区的指针*/intnlength=0;/*词法分析中记录单词的长度*/intlnum=0;/*源程序行数记

7、数,源程序长度*/inttt1=0;/*变量名表指针*/FILE*cfile;/*源程序文件,~为结束符*//*FILE*mfile;*/intnewt=0;/*临时变量计数器*/intnxq=100;/*nxq指向下一个形成的四元式的地址*//*每次执行gen()时,地址自动增1*/intlr;/*扫描LR分析表1过程中保存的当前状态值*/intlr1;/*扫描LR分析表2或表3所保存的当前状态值*/intsp=0;/*查找LR分析表时状态栈的栈顶指针*/intstack1[100];/*状态栈1的定义

8、*/intsp1=0;/*状态栈1的栈顶指针*/intnum=0;/*算术或布尔表达式缓冲区指针*/structll{intnxq1;/*记录下一条四元式的地址*/inttc1;/*真值链*/intfc1;/*假值链*/}labelmark[10];/*记录语句嵌套层次的数组,*//*即记录嵌套中每层的布尔表达式E的首地址*/intlabeltemp[10];/*记录语句嵌套层次的数组,*//*即记录每层else之前的四元式地

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

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

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