下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精品文档1欢迎下载编译方法实验报告精品文档2欢迎。下载实验1:扫描器的设计实验目的熟悉并实现一个扫描器(词法分析程序)精品文档3欢迎下载实验要求(1)设计扫描器的有限自动机(识别器) ;(2)设计翻译、生成Token的算法(翻译器);(3)编写代码并上机调试运行通过。输入源程序文件或源程序字符串;输出一一相应的Token序列;关键字表和界符表;符号表和常数表;三、实验步骤流程:初始化;打开用户源程序文件;while(文件未结束)读入一行到wi,i=0;do/词滤空格,直到第一个非空的wii-;s=1; /while(s!=0)/act(s); /if(s=11 & sThe n=Els
2、e=VV=四、主要数据结构1状态转换矩阵:int aut107= 2, 0, 0, 0, 8, 9, 15,2, 3, 5,11,0, 0, 11,4, 0, 0, 0, 0, 0, 0,4, 0, 5,11,0, 0, 11,7, 0, 0, 6, 0, 0, 0,7, 0, 0, 0, 0, 0, 0,7, 0, 0,11,0, 0, 11,d11QZ+卜Q+Q+-dk( (- _l/d-1/+/-1I-1-11213-115b为界符,-1代表其它符号(如在状态12)。8处遇到了非字母精品文档5欢迎下载8, 0, 0, 0, 8, 0, 12,0, 0, 0, 0, 0, 10, 14,0
3、, 0, 0, 0, 0, 0, 13;2关键字表:char keywords3012=“program”,”begin”,”end”,”var”,”while”,”do”,”X X”X X-I-I” ”丄 ”H”I I% %”repeat”,”until”,”for”,”to”,”if”,”then”,”else”“;”,”:”,”(“,”)”,”,”,”:=”,”+”,”-“,”*”,”/JJJJ) )KJKJj jJJJJB BJ JJ JJ JJ J”,”=”,”=”,“”,“=a & wi=0& wi=11 & s=14) /*判断是否是 终止状态*是终止状态
4、,则形成一个token break;i+; /getchar()*读取下一个字符s=find(s,wi); /状态转换if (s=0)strTOKENi_str=0;精品文档7欢迎。下载printf(词法错误:%sn,strTOKEN);while (wi!=10);printf(关键字表:); /for (i=0;i30;i+) printf(%s ,keywordsi);printf(n);printf(Token序列:);for (i=0;inum_token;i+)printf(%d,%d),toki.code,toki.value);printf(n);printf(符号表:);fo
5、r (i=0;inum_ID;i+)printf(%s ,IDi);printf(n);printf(常数表:);for (i=0;inum_C;i+)printf(%d ,Ci);printf(n);fclose(fp);printf(Hello World!n);return 0;/*状态转换后,达到新的状态之后,记录的变化void act(int s)int code;switch (s)case 1:n=0;m=0;p=0;t=0;e=1;num=0;i_str=0;strTOKENi_str=0; /化break;case 2:n=10*n+wi-48;break;case 3:t=
6、1;break;case 4:n=10*n+wi-48; m+;输出结果其它变量初始精品文档8欢迎。下载toki_token+.value=InsertID(strTOKEN); /生成标识符Tokennum_token+;break;case 13:strTOKENi_str=0; code=Reserve(strTOKEN); /查界符表if (code) toki_token.code=code; toki_token+.value=0; /生成界符TokenelsestrTOKENstrlen(strTOKEN)-1=0; /单 界符i-; code=Reserve(strTOKEN)
7、; /查界符表toki_token.code=code;toki_token+.value=0;break;case 5:t=1;break;case 6:if (wi=-) e=-1;break;case 7:p=10*p+wi-48;break;case 8:strTOKENi_str+=wi; /的尾部;break;case 9:strTOKENi_str+=wi; /的尾部;break;case 10:strTOKENi_str+=wi; /的尾部;break;case 11:num=n*pow(10,e*p-m);toki_token.code=2;toki_token+.value
8、=InsertConst(num); /num_token+;break;case 12:strTOKENi_str=0;code=Reserve(strTOKEN);if (code) toki_token.code=code;/生成关键字Tokenelse toki_token.code=1;将ch中的符号拼接到strTOKEN将ch中的符号拼接到strTOKEN将ch中的符号拼接到strTOKEN/计算常数值生成常数Token/查关键字表toki_token+.value=0; 精品文档9欢迎。下载/生成界符Tokennum_token+; break;case 14:strTOKENi
9、_str=0; code=Reserve(strTOKEN);toki_token.code=code;/生成界符Tokennum_token+; break;/*状态转换int find(int s,char ch)int i,col=7;struct map *p;p=ptr;for (i=0;istr,ch)col=(p+i)-col; break;return autscol;/*向常量表中插入常量int InsertConst(double num)int i;for (i=0;inum_C;i+)if (num=Ci) return i;Ci= (int)num;num_C+;re
10、turn i;int Reserve(char *str)int i;for (i=0;inum_key;i+)/查界符表toki_token+.value=0;精品文档10欢迎下载if (!strcmp(keywordsi,str) return (i+3);return 0;/*向符号表中插入新的符号int In SertID(Char *str)int i;for (i=0;i VnU m_ID;i+)if (!strcmp(IDi,str)/*返回地址return i;StrCPy(IDi,str);nu m_ID+;return i;六、实验结果- - JlJlB Bl-l-; 夭
11、了 一衣盂Pr-OlPr-Ola aanan besfinbesfin IBrlIdIBrlId UaIUaIh hWhileWhile dlodlo repeatrepeat UUnlti.1UUnlti.1 f f o ot t匕口IfIft t lielie inin elseelse : : Z-Z- r r - - * * r r - -Ta)enFF?l|Ta)enFF?l|:flfl .1c.icfl.01.4)Ci-0)Cl-tfl.01.4)Ci-0)Cl-tExeExeJlJlo,u,eecec,s,s 19eoeoccss aa.aa.aa .vxz2.vxz2. czf
12、l.czfl.a.4ca.4cs s . .af.af.B B,WHXlHXl .17il.17i2525 打 耳靑!i iL L f f indind N N uudrdr c c 1 1 VUIVUI SlrLljLtSlrLljLt IldUIldU PtrPtr IlMlIlMl HErUhPHErUhP 3tr3tr IJrVdkIJrVdk rwlumrwlum auau t ttui*rtui*r械7 7 0 0HelloHello ItoirlItoirld?d?PmPmi i r r JiJitntn C(IntC(Intinueinue实验思考题:1.扫描器的任务是什么?答
13、:词法分析程序又称扫描器,任务有:(1)识别单词从用户的源程序中把单词分离出来;(2)翻译单词把单词转换成机内表示,便于后续处理2.扫描器、识别器、翻译器三者之间的关系是怎样的? 答:扫描器、识别器、翻译器三者之间的关系是:扫描器的实现要通过识别器和翻译器1.为什么说有限自动机是词法分析的基础?答:因为词法分析的包括:识别-识别单词的有限自动机。和翻译-根据有限自动机所识别出的对象,完成从单词串到单词的符号已经存在,则精品文档11欢迎下载ToKEN串的翻译。我们可以看出,不论是识别还是分析,都是应用有限自动 机,所以可以说有限自动机是词法分析的基础。实验2:中间代码生成器的设计一、 实验目的熟
14、悉算术表达式的语法分析与中间代码生成原理。二、 实验要求(1)设计语法制导翻译生成表达式的四元式的算法;(2)编写代码并上机调试运行通过。输入算术表达式输出一一语法分析结果相应的四元式序列(3)本实验已给出递归子程序法的四元式属性翻译文法的设计, 鼓励学生在 此基础上进行创新,即设计LL(I)分析法或LR(O)分析法的属性翻译文法, 并根据这些属性翻译文法,使用扩展的语法分析器实现语法制导翻译。三、 设计概要(1)算术表达式文法G(E) : EE OT | TTT 1F | FF i | (E)(2)文法变换G(E)ET OTTF 1FF i | (E)(3)属性翻译文法:ET 0“PuSh(
15、SYN, W) ”T “QUAT”TF 1“PuSh(SYN, W) ”F“QUAT”Fi“PuSh(SEM, entry(W) ”| (E)其中: PuSh(SYN, W) 当前单词W入算符栈SYN; PUSh(SEM, entry(w) 当前W在符号表中的入口值压入语义栈SEM;QUAT生成四元式函数iT = neWtemP;iiQTj =( SYNk, SEMS-1, SEMS, T); j+;精品文档12欢迎下载iiipop( SYN, _); pop( SEM, _); pop( SEM, _);push( SEM, T);TF(4)递归下降子程序:数据结构:SYN算符栈;SEM语义
16、栈;入口F:岀口主程序:输出四元式序列四、实验核心代码void main()t = 1;COutV=a&w=A&w=Z) theWord = w; /当前字符是字母markStack.push(theWord); /则压栈exit(0);else / cerr输入错误!w;return w;char E(char w)/E自动机string operate,a,b,c;string state5;w = T(w);while(w=+|w=-)/是加或减符号operate = w;cinw;/读入下一字符w = T(w);b = markStack.pop();/字符栈弹出a =
17、 markStack.pop();/两个操作字符else if(w = ()cinw; / w = E(w);if(w!=) / cerr输入错误!endl;/是左括号 则读取下一字符不是右括号则输入有误,报错否则有误,报错/读取下一字符精品文档14欠迎下载cout(operate,a,b,tt)w; w =F(w);b = markStack.pop(); a= markStack.pop();/读取下一字符/符号栈弹出/两个操作字符cout(operate,a,b,tt)w; w= E(w);if(w=#) return true;else returnfalse;/Z自动机/遇到#则结束
18、五、 实验结果精品文档15欢。迎下载精品文档14欠迎下载实验思考题:1.语法分析分为几类?其关键技术各是什么?答:自顶向下法(推导法)从开始符号出发,采用推导运算,试图自顶向下构造语法树。自底向上法(归约法)从给定的符号串出发,采用归约运算,试图自底向上构造语法树。2什么是递归下降子程序法,什么是LL(I)分析法?二者对文法各有什么要求?答:递归下降子程序法:递归子程序法属于自顶向下语法分析方法。故又名递 归下降法。要求文法是LL(I)文法。LL(I)分析法:LL(I)分析法是指从左到右扫描(第一个L)、最左推导(第二个L)和只查看一个当前符号(括号中的1)之意;LL(I)分析法又称预测分析法,属于自顶 向下确定性语法分析方法。要求文法是LL(I)文法。3.比较LL(I)分析法和递归下降子程序法的异同。答:相同点:都要求文法是LL(I)文法;都是自顶向下的分析方法;都通过分 析下个字符来判断该进入哪个状态或者调用哪个函数。不同点:LL(I)分析法先建立起预测分析表,通过对分析栈的不断操作(出栈,入栈)来进行;递归下降子程序法是通过函数间的函数调用来实现不同状态间 的转换,并简化了代码。4.什么是语法制导翻译技术?其核心技术是什么?答:语法制导翻译是在语法分析过程中, 随着分析(推导或归约)的逐步进展,每识别出一个语法结构,根据文法的每个规则
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 内科学总论结肠息肉恶变防治课件
- 安徽交控集团所属安徽交控资源有限公司2026年校园招聘备考题库及一套完整答案详解
- 2026年中国华电集团产融控股有限公司本部一般管理人员公开招聘备考题库及一套完整答案详解
- 2026年重庆市合川区肖家镇卫生院招聘非在编医学检验、临床护理人员备考题库及参考答案详解一套
- 2026年浙江中医药大学临床医学院及直属附属医院公开招聘277人备考题库有完整答案详解
- 2026年武汉市第三十二中学招聘初中教师备考题库附答案详解
- 佛山市三水区云东海街道公办幼儿园2026年春季学期公开招聘合同制工作人员的备考题库及一套完整答案详解
- 2026年中国人民大学高瓴人工智能学院招聘备考题库及完整答案详解
- 2026年福田区第三幼儿园(石厦)招聘备考题库及答案详解参考
- 2026年四川工商学院招聘专任教师岗位5人备考题库附答案详解
- 《房地产信托》课件 - 深入了解房产投资的新渠道
- 保险业案防培训课件
- 个体户公司章程范本
- 2024年第一次广东省普通高中数学学业水平合格性考试真题卷含答案
- 交通运输工程质量检测项目清单预算编制规范
- 人教版小学六年级语文下册全部词语表
- 物业工程维修员安全培训
- 2024年全国甲卷《霜降夜》解读
- 2024秋期国家开放大学《国际法》一平台在线形考(形考任务1至5)试题及答案
- 外国文学1智慧树知到期末考试答案章节答案2024年绍兴文理学院
- 安全防护用具检查记录表
评论
0/150
提交评论