




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、编译原理课内实验报告学院 计算机学院专业计算机科学与技术年级班别2012级6班学号3112006028学生姓名曾主赐辅导教师刘添添成绩2014年12月一.完成内容1 .扩充单词:(1)保留字:for,step, until,char,real,return双字符:*=,/=;(3)单字符:,*,/ ;2 .扩充语句:var a;begina:=1;doa:=a+1while a<5;write(a);end.二.设计思路1 .扩充单词1)修改变量定义:void init()int i;for(i=0;i<=255;i+)ssymi=nul;ssym'+'=plus;
2、ssym'-'=minus;ssym'*'=times;ssym'/'=slash;ssym'('=lparen;ssym')'=rparen;ssym'='=eql;ssym','=comma;ssym'.'=period;ssym'#'=neq;ssym''=semicolon;ssym''=l1;ssym''=r1;/*设置保留字名字,按照字母顺序便于折半查找*/strcpy(&(word0
3、0),"begin");strcpy(&(word10),"call");strcpy(&(word20),"char");strcpy(&(word30),"const");strcpy(&(word40),"do");strcpy(&(word50),"end");strcpy(&(word60),"for");strcpy(&(word70),"if");strcpy(&am
4、p;(word80),"odd");strcpy(&(word90),"procedure");strcpy(&(word100),"read");strcpy(&(word110),"real");strcpy(&(word120),"return");strcpy(&(word130),"step");strcpy(&(word140),"then");strcpy(&(word150),&quo
5、t;until");strcpy(&(word160),"var");strcpy(&(word170),"while");strcpy(&(word180),"write");/*设置保留字符号*/wsym0=beginsym;wsym1=callsym;wsym2=charsym;wsym3=constsym;wsym4=dosym;wsym5=endsym;wsym6=forsym;wsym7=ifsym;wsym8=oddsym;wsym9=procsym;wsym10=readsym;wsy
6、m11=realsym;wsym12=returnsym;wsym13=stepsym;wsym14=thensym;wsym15=untilsym;wsym16=varsym;wsym17=whilesym;wsym18=writesym;修改pl0.h头文件里定义的全局数据# define norw 19# define txmax 100# define nmax 14# define al 10# define amax 2047# define levmax 3# define cxmax 200*/*关键字个数*/*名字表容量*/*number的最大位数*/*符号的最大长度*/*地
7、址上界*/*最大允许过程嵌套声明层数0, lexmax*/*最多的虚拟机代码数*/*符号*/ enum symbolnul,ident,number,plus,minus, times,slash,oddsym,eql,neq,lss,leq,gtr,geq, lparen,rparen, comma, semicolon,period, becomes, beginsym,endsym,ifsym,thensym,whilesym, writesym,readsym,dosym,callsym,constsym, varsym,procsym,forsym,stepsym,untilsym,
8、 charsym,realsym,returnsym,p,q,l1,r1;#define symnum 42 /*2)修改GetSym()方法:/*词法分析,获取一个符号*/int getsym() int i,j,k;while( ch=' '|ch=1011ch=9) getchdo;)if(ch>='a'&&ch<='z')(k=0;doif(k<al)ak=ch;k+;)getchdo;while(ch>='a'&&ch<='z'|ch>=
9、'0'&&ch<='9');ak=0;strcpy(id,a);i=0;j=norw-1;dok=(i+j)/2;if(strcmp(id,wordk)<=0)j=k-1;if(strcmp(id,wordk)>=0)i=k+1;while(i<=j);if(i-1>j)sym=wsymk;printf("保留字 n");elsesym=ident;printf("标识符 n");elseif(ch>='0'&&ch<='9&
10、#39;)k=0;num=0;sym=number;donum=10*num+ch-'0'k+;getchdo;while(ch>='0'&&ch<='9'); /* 获取数字的值 */ k-;if(k>nmax)error(30);elseif(ch=':')/*检测赋值符号*/getchdo;if(ch='=')sym=becomes;printf("kn");getchdo; else sym=nul;printf("n");/*不能识
11、别的符号*/elseif(ch='*')/*xiugai*/getchdo; if(ch='=') sym=p; printf("*=n"); getchdo; else sym=times; printf("*n"); getchdo;elseif(ch='/') getchdo; if(ch='=') sym=q;printf("/=n"); getchdo; else sym=slash; printf("八n");getchdo;elseif(
12、ch='<,)/*检测小于或小于等于符号*/getchdo;if(ch='=')sym=leq;printf("<=n");getchdo;elsesym=lss;printf("<n");elseif(ch='>')/*检测大于或大于等于符号*/getchdo;if(ch='=')sym=geq;printf(">=n");getchdo;elsesym=gtr;printf(">n"); else sym=ssymch;
13、/*当符号不满足上述条件时,全部按照单 字符号处理*/printf("单字符 n");/getchdo;/richardif(sym!=period) getchdo;/end richardreturn 0;2 .扩充语句1)产生式以及语法描述图:产生式:a:=1 do a:=a+1 while a<5语法描述图:a:=1a:=a+1whilea<52)递归下降子程序:if(sym=dosym)getsymdo;memcpy(nxtlev,fsys,sizeof(bool)*symnum);nxtlevwhilesym=true;statementdo(fsy
14、s,ptx,lev);if(sym=whilesym) getsymdo; conditiondo(nxtlev,ptx,lev); else error(18);3)举例设计语句的pcode代码:var a;begina:=1;doa:=a+1while a<5;write(a);end.1 int 0 42 int 0 13 sto 0 34 lod 0 35 lit 0 16 opr 0 27 sto 0 38 lod 0 39 lit 0 510 opr 0 1011 jpc 0 1312 jmp 0 413 lod 0 314 opr 0 1415 opr 0 1516 opr
15、 0 04)在递归下降子程序中增加语义动作:if(sym=dosym) cx1=cx;getsymdo;memcpy(nxtlev,fsys,sizeof(bool)*symnum); nxtlevwhilesym=true;statementdo(fsys,ptx,lev); if(sym=whilesym) getsymdo;conditiondo(nxtlev,ptx,lev);cx2=cx;gendo(jpc,0,0);gendo(jmp,0,cx1); codecx2.a=cx; else error(18);三.运行测试1.扩充单词的测试(贴运行结果截图)ps:测试情况要全!图片大
16、小合适!截图如下所示:Input pl/0 file ?11.pl0 List object code ?<Y/N)y List symbol table ? <Y/N)y 0 begin保留字TABLE: NULL2 step保留字XXXX f192 until保留字2 char保留字2 real保留字return保留字2 *=单字符 单字符2 end.单字符.int 0 3! opr 0 0in pl/0 progpan iess any key to continue2.语句的测试(贴运行结果截图) 截图如下所示:Input pl/0 file ?22-pl0 List object code ?<¥/N>y List symbol table ?0 vai* a ;住留字fel1 begin保留字TABLE: 1 u
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 江海职业技术学院《学院通选课传统文化艺术》2023-2024学年第二学期期末试卷
- 内蒙古商贸职业学院《论文写作与工程伦理》2023-2024学年第二学期期末试卷
- 辽宁师范大学《游泳课保健》2023-2024学年第二学期期末试卷
- 厦门大学《外国文学史下》2023-2024学年第二学期期末试卷
- 宁波城市职业技术学院《空间设计与制作》2023-2024学年第二学期期末试卷
- 山西省太原市小店区一中2025年高三下第一次(4月)月考物理试题含解析
- 山东枣庄八中2024-2025学年高三下学期第四次模拟考试英语试题试卷含解析
- 吉林省第二实验校2024-2025学年初三下学期质量调查(一)数学试题含解析
- 江苏省连云港市东海县2025届高三下学期第二次模拟(二模)考试数学试题试卷含解析
- 吉林省长春市外国语学校2025届高三下学期第二次验收考试化学试题试卷含解析
- 【工程法规】王欣 教材精讲班课件 39-第6章-6.4-施工现场安全防护制度
- 重难点18 球的切、接问题(举一反三)(新高考专用)(教师版) 2025年高考数学一轮复习专练(新高考专用)
- 职业心理健康课件
- 电子测量仪器的微机电系统技术考核试卷
- 亚洲弦歌-深情 课件 2024-2025学年人音版(简谱)(2024)初中音乐七年级上册
- 【产业图谱】2024年广州市重点产业规划布局全景图谱(附各地区重点产业、产业体系布局、未来产业发展规划等)
- 2024年云南省昆明市盘龙区小升初英语试卷
- 温室大棚钢结构安装方案
- 2024-2030年中国宠物殡葬服务行业市场深度调研及发展战略与投资前景研究报告
- 2024-2030年中国军用掩蔽系统行业市场发展趋势与前景展望战略分析报告
- 2024年山东省淄博市淄川区小中考二模生物试题(解析版)
评论
0/150
提交评论