编译原理pL0实验报告.doc

编译原理pL0实验报告.doc

ID:51745695

大小:279.00 KB

页数:11页

时间:2020-03-15

编译原理pL0实验报告.doc_第1页
编译原理pL0实验报告.doc_第2页
编译原理pL0实验报告.doc_第3页
编译原理pL0实验报告.doc_第4页
编译原理pL0实验报告.doc_第5页
资源描述:

《编译原理pL0实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、一.课程设计要求基本内容:(1)扩充赋值运算:*=和/=(2)扩充语句(Pascal的FOR语句):①FOR<变量>:=<表达式>TO<表达式>DO<语句>②FOR<变量>:=<表达式>DOWNTO<表达式>DO<语句>其中,语句①的循环变量的步长为2,语句②的循环变量的步长为-2。二.设计思路在课内实验的基础上,额外增加*=和/=运算符和关键字的语义动作,以下是设计思路:1.扩充单词在头文件pl0.h中的enumsymbol中增加关键字forsym,tosym,downtosym,timeseqlsym,slasheqlsym,并修改关键字数#definesymnum46。/*

2、初始化*///ssym['*=']=timeseql;//ssym['/=']=slasheql;/*设置保留字名字,按照字母顺序,便于折半查找*/strcpy(&(word[14][0]),"to");/*增加后需要按序排列*/strcpy(&(word[7][0]),"for");strcpy(&(word[4][0]),"downto");strcpy(&(word[3][0]),"do");/*设置保留字符号*/wsym[7]=forsym;wsym[14]=tosym;/*语法分析,获取一个符号*/在getsym()部分添加:elseif(ch=='*'){/**“*=

3、”**/getchdo;if(ch=='='){sym=timeseql;getchdo;printf("check*=success!");}elsesym=times;}elseif(ch=='/'){/*“/=”*/getchdo;if(ch=='='){sym=slasheql;getchdo;printf("check/=success!");}elsesym=slash;}/*其中printf部分均为识别成功后用作返回的信息而设*/2.扩充赋值运算符:*=和/=,关键字For①EBNF范式的书写:<变量>*=

4、/=<表达式>::=for<变量>:=<表达

5、式>to<表达式>do<语句>::=for<变量>:=<表达式>downto<表达式>do<语句>②语法描述图:a.*=和/=:语句Ident:=/=*=表达式①递归下降子程序a.增加+=,/=;找到statement部分的becomes部分作为修改:/以下为连接become语句后的修改部分*/elseif(sym==timeseql){getsymdo;memcpy(nxtlev,fsys,sizeof(bool)*symnum);expressiondo(nxtlev,ptx,lev);gendo(lod,lev-table[i].level,table[i].

6、adr);gendo(opr,0,4);gendo(sto,lev-table[i].level,table[i].adr);}elseif(sym==slasheql){getsymdo;memcpy(nxtlev,fsys,sizeof(bool)*symnum);gendo(lod,lev-table[i].level,table[i].adr);expressiondo(nxtlev,ptx,lev);gendo(opr,0,5);gendo(sto,lev-table[i].level,table[i].adr);}}}}b.增加for:找到statement部分的ca

7、lsym部分后作为增加:/以下为连接callsym语句后的增加部分*/elseif(sym==forsym){getsymdo;if(sym==ident){i=position(id,*ptx);if(i==0){error(11);}else{if(table[i].kind!=variable){error(12);i=0;}else{getsymdo;if(sym==becomes){getsymdo;}else{error(13);}memcpy(nxtlev,fsys,sizeof(bool)*symnum);expressiondo(nxtlev,ptx,lev);

8、if(i!=0){gendo(sto,lev-table[i].level,table[i].adr);}}}}if(sym==tosym){getsymdo;memcpy(nxtlev,fsys,sizeof(bool)*symnum);nxtlev[dosym]=true;/*后跟符号为do*/cx1=cx;/*保存判断条件超作的位置*/gendo(lod,lev-table[i].level,table[i].adr);expressiondo(nxtlev,ptx,lev

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。