ImageVerifierCode 换一换
格式:DOCX , 页数:42 ,大小:123.69KB ,
资源ID:14838628      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/14838628.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(小型编译程序的设计与实现文档格式.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

小型编译程序的设计与实现文档格式.docx

1、6保留字enda7赋值语句semico Ion8a . je9布尔表达式Jin ghao10“ # ”S11语句L12复合语句Tempsy15临时变量EA18B and(即布尔表达式中的bAEO19B or(即布尔表达式中的BVPlus34“ + ”Times36“ * ”Becomes38“:=”赋值Op_and39“ 1 andOp_or40a orOp_not41notRop42关系运算符Lpare nt48“( ”Rpare nt49Ide nt56变量Intconst57整常量#i nclude stri ng.h#defi ne ACC -2/*/#defi ne sy_if 0#

2、defi ne sy_the n 1#defi ne sy_else 2#defi ne sy_while 3#defi ne sy_begi n 4#defi ne sy_do 5#defi ne sy_e nd 6#defi ne a 7#defi ne semico Ion 8#defi ne e 9#defi ne jin ghao 10#defi ne S 11#defi ne L 12#defi ne tempsy 15#define EA 18 /*E and*/#defi ne E0 19 /E or*/#defi ne plus 34#defi ne times 36#def

3、i ne becomes 38#defi ne op_a nd 39#defi ne op_or 40 #defi ne op_not 41#defi ne rop 42#defi ne Ipare nt 48#defi ne rpare nt 49#defi ne ident 56#defi ne intconst 571.2变量及数据结构说明编译程序中涉及到的变量及数据结构说明如下:char ch=0: /* 从字符缓冲区读取当前字符*/in t cou nt=O; /* 词法分析结果缓冲区计数器*/static char spelling10=; /* 存放识别的字 */static c

4、har line81= /* 一行字符缓冲区,最多 80个字符*/char *pline; /* 字符缓冲区指针*/static char ntab110010; /* 变量名表,共 100 项,每项长度 10*/struct n tabint tc; /* 真值 */int fc; /* 假值 */ntab2200; /* 在布尔表达式 E中保存有关布尔变量的真、假值*/int label=0; /* 指向 ntab2 的指针 */struct rwordschar sp10;int sy; /*保留字表的结构,用来与输入缓冲区中的单词进行匹配 */struct rwords resword

5、s10=if,sy_if,do,sy_do,else,sy_else,while,sy_while,the n,sy_the n,begi n,sy_begi n,e nd,sy_e nd,a nd,op_a nd,or,op_or,n ot,op_not; /* 保留字表初始化,大小为 10*/struct aaint sy1; /* 存放单词的种别编码*/int pos; /* 存放单词自身的值*/buf1000, /* 词法分析结果缓冲区*/n, /*读取二元式的当前字符*/n 1, /*当前表达式中的字符*/E, /*非终结符*/sstack100, /* 算术或布尔表达式加工处理使用

6、的符号栈 */ibuf100, /* 算术或布尔表达式使用的缓冲区*/stack1000; /* 语法分析加工处理使用的符号栈*/struct aa oth; /* 四元式中的空白位置*/struct fourexpchar op10;struct aa arg1;struct aa arg2;int result;fexp200; /* 四元式的结构定义*/int ssp=0; /* 指向 sstack 栈指针 */struct aa *pbuf=buf; /* 指向词法分析缓冲区的指针*/int nlength=0; /* 词法分析中记录单词的长度*/int tt1=0; /* 变量名表指

7、针*/char *cfile; /* 源程序文件,为结束符*/int Inum=0; /* 源程序行数记数*/int sign=0; /*sign=1 为赋值语句;=2为while语句;=3为if语句*/*/int newt=0; /* 临时变量计数器*/int nxq=100; /*nxq 总是指向下一个将要形成的四元式地址,*/*每次执行gen ()时,地址自动增1*/int lr; /* 扫描LR分析表1过程中保存的当前状态值*/int lr1; /* 扫描LR分析表2或表3所保存的当前状态值*/int sp=0; /* 查找LR分析表时状态栈的栈顶指针*/int stack1100;

8、/* 状态栈 1 定义 */int sp仁0; /* 状态栈1的栈顶指针*/int num=O; /* 算术或布尔表达式缓冲区指针*/struct 11int nxql; /* 记录下一条四元式的地址*/int tc1; /* 真值链 */int fc1; /* 假值链 */labelmark10; /* 记录语句嵌套层次的数组,*/*即记录嵌套中每层的布尔表达式 E的首地址*/in t labeltemp10;/*即记录每层else之前的四元式地址*/int pointmark=-1, /*labelmark 数组指针 */pointtemp=-1; /*labeltemp 数组指针 */1

9、.3主函数main ()void main(cfile=fopen(pas.dat,r; /* 打开 C语言源文件 */readch(; /* 从源文件读一个字符*/scan(; /* 词法分析*/disp1(;disp3(;stacksp.pos=0;stacksp.sy1=-1; /* 初始化状态栈 */stack1sp1=0; /* 初始化状态栈 1*/oth.sy1=-1;readn u(; /* 从二元式读入一个符号 */lrparse(; /*语法语义分析产生四兀式 */getch(;disp2(;prin tf(n程序运行结束! n1.4词法分析函数说明(1)读取函数 readl

10、ine(、readch(词法分析包含从源文件读取字符的操作,但频繁的读文件会影响程序执行效 率,故实际上是从源程序文件“ pas.dat ”中读取一行到输入缓冲区,而词法分析 过程中每次读取一个字符时则是通过执行 readch ()从输入缓冲区获得的;若缓冲区已被读空,则再执行readline ()从pas.dat中读取下一行至输入缓冲区。readli ne(char chi;pli ne=li ne;ch1=getc(cfile;while(ch1!=n & !feof(cfile*pli ne=ch1;pli ne+;pli ne=Oreadch(if(ch=readli ne(;Inu m+;ch=*pli ne;(2)扫描函数scan(扫描函数scan ()的功能是滤除多余空格并对主要单词进行分析处理,将分 析得到的二元式存入二元式结果缓冲区。scan(int i;while(ch! /* 是源程序结束符号*/switch(chcase :break;a case bcde case f :ghijk case T :mnopqrstuvwxyz : /* 保留字和标识符中的字母只能是小写字母 */identifier(; /* 识别保留字和标识符*/O12345678case 9 :number(; /*识别整常数*/buf

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1