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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

编译实验报告文档格式.docx

1、If(flag=1) if (当前字符为数字) 记录当前数字; while(当前字符为数字) 记录字符;记单词编码为实数的编码(当前Token为实数);else Error(2);if (当前字符为.)删除余下数字;if (当前字符为字母) 舍去后面的部分;OutPut();14 IsChar()识别字符串。 2算法描述: void IsChar() for (;) 读取下一字符; 现行Token为字符串; If(当前字符不是.号) 记录字符; Else break;读下一字符;15 IsOther()识别其他单词。 void IsOther() switch(当前字符) 对于不同字符做出不同

2、处理,主要有: 1、符号内容的记取; 2、查出机内码; 3、调用OutPut()输出至Token()文件; 4、读取下一字符; 5、对于错误符号将其删除,并报错;16 ScannerInit()进行初始化,主要包括: 1、建立单词编码表、token表、符号表,并将它们清空。 2、打开单词编码文件,并将单词编码读到编码表中。17 OutPut()输出识别出的单词,包括: 2若单词为标识符或常数再查,填符号表。18 Error() 1.功能:判断错误原因。2在由词法分析程序对L语言源程序分析产生的token,符号表文件的基础上,从完成语法语义分析,并产生相应的中间代码-四元式序列。21 paser

3、()主模块,完成初始化,并调用复合语句分析模块和说明语句分析模块,完成分析任务。 void paser() 初始化; 从Token文件读取第一个单词; if (单词= =program) 读取下一单词; if (单词= =标识符) if(单词为;) 行数加一; 读取下一单词; if (单词为var) declear( ); if (单词为begin) S_Begin(); if (code 不是等于号) Error(49);else 出错处理;else出错处理;22 S_Begin()完成复合语句的分析。 2算法描述 S_Begin() if (当前字符为begin) 调用L_Analize(

4、); if(当前字符为end) 结束; else 非正常结束,返回0;读取下一字符;返回;23 L_Analize()完成语句序列分析。 L_Analize() int rtn; switch(当前字符) case IF:调用S_IF()函数;break; case BEGIN :调用S_Begin()函数;braek; case 标识符:调用 S_Let()函数;break; case WHILE:调用 S_While();if (当前字符为: 行数加一; 递归调用L_Analize()else return rtn;24 S_Let()完成赋值语句的分析。 2算法分析 S_Let(int

5、a) if (当前字符为标识符) if (需要记录变量的地址) 记录赋值变量的地址;读取下一个单词; if(当前单词为赋值号) 调用表达式分析函数L_Analize(); if(表达式正确) 生成赋值句四元式;else 赋值句出错;return四元式序号;25 S_IF()完成条件语句的分析。 Int S_IF() int a; int rtn=0; 定义一个真出口True_address和一个假出口Flase_address; if(当前单词为if) 布尔表达式初始化; 调用布尔表达式分析函数B_Analize(); rtn=布尔表达式的四元式首址; 产生无条件跳转四元式; if (当前单词

6、为then) switch(当前单词) BackPatch(); if(当前单词为else) BackPatch(); else rtn;else 报错;(缺少then)rtn;26 S_While()完成while循环语句的分析。 2算法描述; int S_While() int rtn=0;boor_value,True_address,False_address; if (当前单词为while) rtn=布尔表达式分析函数B_Analize(); boor_value=布尔表达式值地址; 产生跳转四元式; if(当前单词为do) switch(当前单词)BackPatch();else

7、出错,缺少do;return rtn;27 gen() 该函数形成一个四元式,并将其输出至四元式文件。28 E_Analize() 1该函数是算术分析表达式的主模块,它调用算术表达式的子模块,采用递归下降分析法完成算术表达式的分析。 2算术表达式的各个子模块: aE_Init()将算术表达式读入分析栈; bint E_AddSub()完成E-TE1|T的分析; cint E1_AddSub(int a) 完成E1-+TE1|-TE1| dT_MulDiv() 完成T-FT1|F的分析; eT1_MulDiv(int a) 完成T1-*FT1|/FT1|; fF_Number() 完成F-i|(

8、E)的分析;29 B_Analize() 1布尔表达式分析的主模块,调用其他布尔表达式的子模块,采用递归下降分析法完成布尔表达式的分析。并返回该布尔表达式的首个四元式地址。 aB_OR()完成B-LB|L的分析; bB1_OR(int a) 完成B1-orLB1|的分析; cL_AND() 完成L-ML1|M的分析; dL1_AND()完成L1-andM1|的分析; eM_NOT()完成M-notM|K的分析; fK_END()完成K-i|false|true|(B)的分析; gK_CMP()完成K-iSi,S-|=|的分析。三、课程设计总结 1、 实验中遇到的问题 词法分析器程序中要读入一个

9、单词编码文件,但是文件的格式在编写的时候和程序有点差异,因而导致输出结果再三的错误。语法/语义分析器中,在修改符号表时,出现错误,最终没有的到正确结果。2、 对实验原理有更深的理解 通过该课程设计,掌握了什么是编译程序,编译程序工作的基本过程及其各阶段的基本任务,熟悉了编译程序总流程框图,了解了编译程序的生成过程,构造工具及其相关的技术对课本上的知识有了更深的理解,课本上的知识师机械的,表面的.通过把该算法的内容,算法的执行顺序在计算机上实现,把原来以为很深奥的书本知识变的更为简单,对实验原理有更深的理解。3、 对该理论在实践中的应用有深刻的理解 通过把该算法的内容,算法的执行顺序在计算机上实

10、现,知道和理解了该理论在计算机中是怎样执行的,对该理论在实践中的应用有深刻的理解。四、参考文献1 贺讯. 编译方法学习指导与实践.北京:机械工业出版社, 第一版. 2004年8月。 五、附录1单词编码文件ni.txt and 1 or 11 begin 2 program 12 bool 3 real 13 + 23 = 33do 4 then 14 - 24 34else 5 true 15 * 25 35end 6 var 16 / 26 36false 7 while 17 . 27 = 37if 8 标识符 18 , 28 integer 9 整数 19 : 29 not 10 实数

11、20 30 ( 21 = 31) 22= 32char 382测试代码文件11.txt program abc; var a:real; begin if a22.2 then x:=c+d; end3词法分析完整源代码 #include#includestdlib.h#define LENGTH 61#define N 100/*/typedef struct token int label; char name30; int code; int addr;token;typedef struct KeyWordKeyWord;typedef struct symble int number

12、; int type;symble;char ch;int var_count;int error_count;int label_count;int code_count;int addr_count;int LineOfPro;char filename30;FILE*KeyFin;FILE*SourceFin;FILE*TokenFout;FILE*SymbleFout;KeyWord keyLENGTH;token CurrentToken;symble CurrentSimble;symble SymbleListN;void Scanner();void ScannerInit()

13、;void IsAlpha();void IsNumber();void IsAnotation();void IsChar();void IsOther();void OutPut();void Error(int a);int WordHave();int strcmp(char*s,char*t) for(;*s=*t;s+,t+) if(*s=0)return 0; return 1;int main() int i=0,j=0; code_count=0; LineOfPro=0; var_count=0; addr_count=1; label_count=1; for(i=0;i

14、N;i+) SymbleListi.number=0; SymbleListi.type=0; for(j=0;j47)&(ch64)&90)|(ch96)&123)|(ch=_)IsAlpha(); else if(ch=)IsChar(); else IsOther(); fclose(SourceFin); fclose(TokenFout); fclose(SymbleFout);分析完毕/n/*初始化*/void ScannerInit() int i=1; int k=0; if(KeyFin=fopen(ni.txtcannot open ni.txtn60; for(k=0;k

15、58) CurrentToken.namek+=ch; ch=fgetc(SourceFin); if(ch=. flag=1; CurrentToken.code=19; CurrentToken.addr=addr_count+; CurrentToken.label=label_count+; if(flag) ch1=fgetc(SourceFin); if(ch158)CurrentToken.namek+=ch; else Error(2); ch=ch1; while(ch58) CurrentToken.namek+=ch; ch=fgetc(SourceFin); Curre

16、ntToken.code=20; Error(2); while(ch58)ch=fgetc(SourceFin); if(ch123) Error(2); while(ch OutPut();/*字母处理*/void IsAlpha() int i,h; h=0; i=0;) CurrentToken.namei+=ch; for(i=1;LENGTH; h=strcmp(CurrentToken.name,keyi.name); if(!h) if(! CurrentToken.code=keyi.code; CurrentToken.addr=-1; else CurrentToken.code=18; CurrentToken.addr=addr_count+;/*字符串处理*/void IsChar() if(ch!=) CurrentToken.namei+=ch; else break;/*

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2