下载此文档

编译原理pL0实验报告.doc


文档分类:高等教育 | 页数:约11页 举报非法文档有奖
1/11
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/11 下载此文档
文档列表 文档介绍
课程设计要求
基本内容:
(1)扩充赋值运算:*= 和/=
(2)扩充语句(Pascal的FOR语句):
①FOR <变量>:=<表达式> TO <表达式> DO <语句>
②FOR <变量>:=<表达式> DOWNTO <表达式> DO <语句>
其中,语句①的循环变量的步长为2,
语句②的循环变量的步长为-2。

在课内实验的基础上,额外增加*=和/=运算符和关键字的语义动作,以下是设计思路:
1. 扩充单词
symbol中增加关键字forsym, tosym, downtosym, timeseqlsym, slasheqlsym,并修改关键字数#define symnum 46。
/*初始化*/
// 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()部分添加:
else if(ch=='*'){ /** “*=”**/
getchdo;
if(ch=='='){
sym=timeseql;
getchdo;
printf("check *= ess!");
}
else sym=times;
}
else if(ch=='/'){ /* “/=”*/
getchdo;
if(ch=='='){sym=slasheql;
getchdo;
printf("check /= ess!");
}
else sym=slash;
}
/*其中printf部分均为识别成功后用作返回的信息而设*/
扩充赋值运算符:*=和/=,关键字For
EBNF范式的书写:
<变量>*=|/=<表达式>
<for 语句>::=for<变量>:=<表达式> to <表达式> do <语句>
<for 语句>::=for<变量>:=<表达式> downto <表达式> do <语句>
语法描述图:
a.*=和/=:
语句
Ident
:=
/=
*=
表达式
递归下降子程序
+=,/=;
es部分作为修改:
/e语句后的修改部分*/

else if(sym==timeseql)
{
getsymdo;
memcpy(nxtlev,fsys,sizeof(bool)* symnum);
expressiondo(nxtlev,ptx,lev);
gendo(lod,lev-table[i].level,table[i].adr);
gendo(opr,0,4);
gendo(sto,lev-table[i].level,table[i].adr);
}
else if(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);
}
}
}
}

:
找到statement部分的calsym部分后作为增加:
/以下为连接callsym语句后的增加部分*/
else

if(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==es)
{
getsymdo;
}
else
{
error(13);
}
memcpy(nxtl

编译原理pL0实验报告 来自淘豆网m.daumloan.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数11
  • 收藏数0 收藏
  • 顶次数0
  • 上传人s1188831
  • 文件大小279 KB
  • 时间2017-08-26