没有合适的资源?快使用搜索试试~ 我知道了~
广工编译原理实验报告.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 195 浏览量
2021-10-06
08:57:18
上传
评论 1
收藏 582KB DOC 举报
温馨提示
试读
18页
广工编译原理实验报告.doc
资源推荐
资源详情
资源评论
-
-
<<编译原理>>
课实验报告
工程名称 PL/0
编译器
学 院____ 计算机学院 ______ _
专 业_ _
年级班别________
学 号 _
学生_______ ___
辅导教师_______
成 绩_______ _______
-
- word.zl-
-
-
目录
一、课实验的容------------------------------------------4
二、实验修改局部--------------------------------------------4
三、概述-------------------------------------------------11
四、构造设计说明-------------------------------------------11
五、各功能模块描述-----------------------------------------14
六、主要成份描述------------------------------------------14
七、测试用例----------------------------------------------16
八、开发过程和完成情况--------------------------------------21
一、课实验的容
对 PL/0 作以下修改扩大:
〔1〕增加单词:保存字 ELSE,FOR,STEP,RETURN
运算符 +=,-=,++,--,&,|,~
〔2〕修改单词:不等号# 改为 <>
〔3〕增加条件语句的 ELSE 子句
二、实验修改局部:
1、增加四个保存字和七个运算符,共十一个单词。
修改局部:#dene symnum 43 //保存字从 32 增加到 43 个
2、增加五个保存字:ELSE,FOR,STEP,RETURN
头文件 pl0.h
enum symbol { 新 增 加 单 词 : elsesym, forsym, stepsym,returnsym,
pluseq/* += */,plusone/* ++ */,plus/* + */,minuseq/* -= */,minusone/*
-- */,minus/* - */,and,or,not}
头文件 pl0.h
#dene norw 24 //关键字从 13 增加到 24 个
PL0.cpp
init();
新增加:〔增加后数组的容要再次根据字母顺序重新排列〕
strcpy(&(word[0][0]),"begin");
strcpy(&(word[1][0]),"call");
strcpy(&(word[2][0]),"const");
strcpy(&(word[3][0]),"do");
strcpy(&(word[4][0]),"else"); /*增加单词:保存字 else*/
strcpy(&(word[5][0]),"end");
strcpy(&(word[6][0]),"for"); /*增加单词:保存字 for*/
-
- word.zl-
-
-
strcpy(&(word[7][0]),"if");
strcpy(&(word[8][0]),"odd");
strcpy(&(word[9][0]),"procedure");
strcpy(&(word[10][0]),"read");
strcpy(&(word[11][0]),"return");/*增加单词:保存字 return*/
strcpy(&(word[12][0]),"step"); /*增加单词:保存字 step*/
strcpy(&(word[13][0]),"then");
strcpy(&(word[14][0]),"while");
strcpy(&(word[15][0]),"write");
wsym[0]=beginsym;
wsym[1]=callsym;
wsym[2]=constsym;
wsym[3]=dosym;
wsym[4]=elsesym; /*else*/
wsym[5]=endsym;
wsym[6]=forsym; /*for*/
wsym[7]=ifsym;
wsym[8]=oddsym;
wsym[9]=procsym;
wsym[10]=readsym;
wsym[11]=returnsym; /*return*/
wsym[12]=stepsym; /*step*/
wsym[13]=thensym;
wsym[14]=whilesym;
wsym[15]=writesym;
3、增加四个运算符 :+=,-=,++,--,∧,∨,┓
PL0.cpp
getsym();
增加对+,-,++,--,+=,-=的识别;
Statement();
增加对+,-,++,--,-=的语句的处理;
Init〔〕中改动:
ssym[‘&’]=and;
ssym[‘|’]=or;
ssym[‘~’]=not;
facbegsys[plusone]=true; // 添加前自加运算
facbegsys[minusone]=true;// 添加前自减运算
Getsym〔〕增加的容:
int getsym()
{
int i,j,k;
while( ch==' '||ch==10||ch==9)
{
getchdo;
}
if(ch>='a'&&ch<='z')
{
k=0;
-
- word.zl-
-
-
do{
if(k<al)
{
a[k]=ch;
k++;
}
getchdo;
}while(ch>='a'&&ch<='z'||
ch>='0'&&ch<='9');
a[k]=0;
strcpy(id,a);
i=0;
j=norw-1;
do{
k=(i+j)/2;
if(strcmp(id,word[k])<=0)
{
j=k-1;
}
if(strcmp(id,word[k])>=0)
{
i=k+1;
}
}while(i<=j);
if(i-1>j)
{
sym=wsym[k];
}
else
{
sym=ident;
}
}
else
{
if(ch>='0'&&ch<='9')
{
k=0;
num=0;
sym=number;
do{
num=10*num+ch-'0';
k++;
getchdo;
}while(ch>='0'&&ch<='
9'); /*获取数字的值*/
k--;
if(k>nmax)
{
error(30);
}
}
else
{
if(ch==':') /*检测
赋值符号*/
{
getchdo;
if(ch=='=')
{
sym=bees;
getchdo;
}
else
{
sym=nul;
/*不能识别的符号*/
}
}
else
{
if(ch=='<') /*检
测小于或小于等于符号*/
{
getchdo;
if(ch=='=')
{
sym=leq;
getchdo;
}
else
{
sym=lss;
}
-
- word.zl-
剩余17页未读,继续阅读
资源评论
gjmm89
- 粉丝: 14
- 资源: 19万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功