![编译原理上机实验报告解析_第1页](http://file2.renrendoc.com/fileroot_temp3/2021-8/6/4db4dec0-44ec-4cce-851d-489ac7dc0185/4db4dec0-44ec-4cce-851d-489ac7dc01851.gif)
![编译原理上机实验报告解析_第2页](http://file2.renrendoc.com/fileroot_temp3/2021-8/6/4db4dec0-44ec-4cce-851d-489ac7dc0185/4db4dec0-44ec-4cce-851d-489ac7dc01852.gif)
![编译原理上机实验报告解析_第3页](http://file2.renrendoc.com/fileroot_temp3/2021-8/6/4db4dec0-44ec-4cce-851d-489ac7dc0185/4db4dec0-44ec-4cce-851d-489ac7dc01853.gif)
![编译原理上机实验报告解析_第4页](http://file2.renrendoc.com/fileroot_temp3/2021-8/6/4db4dec0-44ec-4cce-851d-489ac7dc0185/4db4dec0-44ec-4cce-851d-489ac7dc01854.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、编译原理上机实验报告解析编译原理课内实验报告学院计算机学院专业计算机科学与技术年级班别2012级6班学号 3112006028 学生姓名曾主赐辅导教师刘添添成绩2014年12月 一完成内容 1. 扩充单词:(1)保留字:for,step, until,char,real,return;(2)双字符:*=,/=;(3)单字符:,*,/ ;2. 扩充语句:var a;begina:=1;doa:=a+1while awrite(a);end.二设计思路1. 扩充单词1)修改变量定义:void init()int i;for(i=0;issymi=nul;ssym+=plus;ssym-=minus
2、;ssym*=times;ssym/=slash;ssym(=lparen;ssym)=rparen;ssym=eql;ssym,=comma;ssym.=period;ssym#=neq;ssym;=semicolon; ssym=l1; ssym=r1;/*设置保留字名字,按照字母顺序,便于折半查找*/ strcpy(&(word00),begin);strcpy(&(word10),call);strcpy(&(word20),char);strcpy(&(word30),const);strcpy(&(word40),do);strcpy(&(word50),end);strcpy(&
3、(word60),for);strcpy(&(word70),if);strcpy(&(word80),odd);strcpy(&(word90),procedure);strcpy(&(word100),read);strcpy(&(word110),real);strcpy(&(word120),return);strcpy(&(word130),step);strcpy(&(word140),then);strcpy(&(word150),until);strcpy(&(word160),var);strcpy(&(word170),while);strcpy(&(word180),wr
4、ite);/*设置保留字符号*/wsym0=beginsym;wsym1=callsym;wsym2=charsym;wsym3=constsym;wsym4=dosym;wsym5=endsym;wsym6=forsym;wsym7=ifsym;wsym8=oddsym;wsym9=procsym;wsym10=readsym;wsym11=realsym; wsym12=returnsym; wsym13=stepsym;wsym14=thensym;wsym15=untilsym;wsym16=varsym;wsym17=whilesym;wsym18=writesym;修改pl0.h头
5、文件里定义的全局数据:# define norw 19 /*关键字个数*/# define txmax 100 /*名字表容量*/# define nmax 14 /*number的最大位数*/# define al 10 /*符号的最大长度*/# define amax 2047 /*地址上界*/# define levmax 3 /*最大允许过程嵌套声明层数0,lexmax*/ # define cxmax 200 /*最多的虚拟机代码数*/*符号*/enum symbolnul,ident,number,plus,minus,times,slash,oddsym,eql,neq,lss,
6、leq,gtr,geq, lparen,rparen, comma, semicolon,period, becomes,beginsym,endsym,ifsym,thensym,whilesym,writesym,readsym,dosym,callsym,constsym,varsym,procsym,forsym,stepsym,untilsym,charsym,realsym,returnsym,p,q,l1,r1;#define symnum 42/*-*/2)修改getsym()方法:/*词法分析,获取一个符号*/int getsym()int i,j,k;while( ch=
7、|ch=10|ch=9) getchdo; if(ch=a&chk=0;doif(kak=ch;k+;getchdo;while(ch=a&ch=0&chak=0;strcpy(id,a);i=0;j=norw-1;dok=(i+j)/2;if(strcmp(id,wordk)j=k-1;if(strcmp(id,wordk)=0)i=k+1;while(iif(i-1j)sym=wsymk;printf(保留字n);else sym=ident; printf(标识符n);elseif(ch=0&chk=0;num=0;sym=number;donum=10*num+ch-0;k+;getc
8、hdo;while(ch=0&chk-;if(knmax)error(30);elseif(ch=:) /*检测赋值符号*/getchdo;if(ch=)sym=becomes;printf(:=n);getchdo;else sym=nul; /*不能识别的符号*/ printf(n);elseif(ch=*) /*xiugai*/getchdo;if(ch=)sym=p;printf(*=n);getchdo;elsesym=times;printf(*n);getchdo;elseif(ch=/)getchdo;if(ch=)sym=q;printf(/=n);getchdo;elses
9、ym=slash;printf(/n); getchdo; elseif(ch=getchdo;if(ch=)sym=leq;printf(getchdo;elsesym=lss;printf(elseif(ch=) /*检测大于或大于等于符号*/getchdo;if(ch=)sym=geq;printf(=n);getchdo;elsesym=gtr;printf(n); else sym=ssymch;/* 当符号不满足上述条件时,全部按照单字符号处理*/printf(单字符n); /getchdo; /richard if(sym!=period) getchdo;/end richar
10、dreturn 0;2. 扩充语句1)产生式以及语法描述图: 产生式:a:=1 do a:=a+1 while a2)递归下降子程序:if(sym=dosym) getsymdo;memcpy(nxtlev,fsys,sizeof(bool)*symnum); nxtlevwhilesym=true; statementdo(fsys,ptx,lev);doa:=a+1whileaa:=1 if(sym=whilesym) getsymdo;conditiondo(nxtlev,ptx,lev);elseerror(18);3)举例设计语句的pcode代码:var a;begina:=1;do
11、a:=a+1while awrite(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 0 0 4)在递归下降子程序中增加语义动作: if(sym=dosym)cx1=cx;getsymdo;memcpy(nxtlev,fsys,sizeof(bool)*symnum);nxtlevwhilesym=true;statementdo(fsys,ptx,lev);if
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024届广西崇左市龙州县中考英语模拟试卷含答案
- 2024届甘肃省天水市麦积区中考英语五模试卷含答案
- 2024年串类制品项目建议书
- 2024年洗衣液项目合作计划书
- 2024届安徽省淮南实验中学中考英语最后冲刺浓缩卷含答案
- 我终于学会了小学的作文(共68篇)
- 2023-2024学年浙江省宁波市北仑区重点达标名校中考英语对点突破模拟试卷含答案
- 2024年金属碘化物材料项目建议书
- 2024-2029年中国风机盘管电机行业市场现状分析及竞争格局与投资发展研究报告
- 2024-2029年中国颠茄磺苄啶片市场发展分析及市场趋势与投资方向研究报告
- 北京版小学数学三年级下册全册教案
- ybb002920052-中性硼硅玻璃管制注射剂瓶
- 南京大学简介PPT模板
- 《建(构)筑物托换技术规程》
- 我的幸运的一天-幼儿绘本PPT课件
- 吊顶招标书(共15页)
- 建筑CAD(国家级获奖课件)-ppt
- 中小学信息技术提升工程 2.0 典型案例教学设计《王戎不取道旁李》
- 2021年12123交管学法减分考试题库及答案
- 学前教育专业实训指导手册
- 反应釜验证方案
评论
0/150
提交评论