东北大学编译原理实验1文档格式.docx
- 文档编号:18863556
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:21
- 大小:130.94KB
东北大学编译原理实验1文档格式.docx
《东北大学编译原理实验1文档格式.docx》由会员分享,可在线阅读,更多相关《东北大学编译原理实验1文档格式.docx(21页珍藏版)》请在冰豆网上搜索。
{
if((ch=='
'
)||(ch=='
\t'
\n'
))//略去空格、TAB、换行
return0;
elseif((IsAlpha(ch)==1)||(ch=='
_'
))//判断是否为字母或'
,从而判断是关键字、标识符、CT字符还是ST字符串
{
if(state==1)
return2;
elseif(state==2)
elseif(state==7)
return8;
elseif(state==8)
elseif(state==10)
return11;
elseif(state==11)
elseif(state==6)//考虑与PT相连的情况
state_to_code(state_before,token);
i=0;
memset(token,0,10);
}
else
return-1;
elseif(IsNum(ch)==1)//判断是否为数字,从而进一步判断是为IT,CT,KT
return3;
elseif(state==3)
elseif(state==4)
return4;
elseif(state==5)
return5;
elseif(ch=='
.'
)//判断是否为CT中的小数点
if(state==3)
\'
'
)//判断是否为CT字符
return7;
return9;
\"
)//判断是否为ST
return10;
return12;
else//判断是否为PT
return6;
elseif(state==2)//考虑与IT,KT相连的情况
elseif(state==3)//考虑与CT相连的情况
elseif(state==9)//考虑与CT字符相连的情况
elseif(state==12)//考虑与ST相连的情况
elseif(state==6)
if(((i==1)&
&
(ch=='
='
))&
((token[0]=='
>
)||(token[0]=='
<
)))
}
b.词法分析器(state_to_code)
intstate_to_code(state_before,token)//词法分析器
intn;
//循环
code1=0;
code2=0;
switch(state_before)
case2:
//KT<
1X>
for(n=0;
n<
6;
n++)
if(strcmp(token,KT[n])==0)
code1=1;
code2=n;
printf("
%d%d>
\n"
code1,code2);
//why改变不了全局的code1,code2
break;
if(code1==0)//IT<
20>
);
case3:
//CT<
30>
printf("
case5:
//CT(小数)<
case6:
//PT<
6X>
for(n=0;
18;
if(strcmp(token,PT[n])==0)
code1=6;
case9:
//CT字符<
40>
case12:
//ST<
50>
default:
//不被任何词识别
Sorryit'
sgoingwrong!
"
c.判断函数
intIsAlpha(charc)//判断是否为字母
if(((c>
a'
)&
(c<
z'
))||((c>
A'
Z'
return1;
intIsNum(charc)//判断是否为数字
if(c>
0'
c<
9'
)
intIsKey(char*word)//判断是否为关键字
intm,n;
if((m=strcmp(word,KT[n]))==0)
if(n==0)
intIsDelimiter(char*token)//判断是否为界符
if((m=strcmp(token,PT[n]))==0)
源程序代码:
(加入注释)
#include<
stdio.h>
stdlib.h>
string.h>
FILE*fp;
charinput[200];
//存放输入字符串
chartoken[10];
//存放构成单词符号的符号串
charword[10];
//存放识别出的单词流
charch;
//存放当前读入字符
intp;
//input下标
inti=0;
//token下标
intstate;
//存放状态标记
intcode1;
//token类别码,1->
KT,2->
IT,3->
CT,4->
CTT,5->
ST,6->
PT
intcode2;
intstate_before;
//存放之前状态
intnum;
//存放整形值
char*KT[6]={"
int"
"
main"
void"
if"
else"
char"
};
//1
char*PT[18]={"
="
=="
+"
-"
*"
/"
{"
}"
"
;
("
)"
["
]"
//18
//char*IT[20]={NULL};
//2
//char*CT[20]={NULL};
//3
//char*CTT[20]={"
\0"
//4
//char*ST[20]={NULL};
//5
intstate_change(state,ch);
intstate_to_code(state_before,token);
intIsAlpha(charc);
intIsNum(charc);
intIsKey(char*word);
intIsDelimiter(char*token);
intmain()
state=1;
//state=1设为初始态,0设为结束态
if((fp=fopen("
E:
\\Cwork\\Analysis\\test.txt"
r"
))==NULL)
Cannotopenfile.\n"
exit
(1);
while((ch=fgetc(fp))!
='
#'
state_before=state;
state=state_change(state,ch);
if(state==-1)
Err!
Stupidman!
elseif(state!
=0)
{
token[i++]=ch;
}
else
if(state_before!
=1)
memset(token,0,10);
i=0;
state=1;
fclose(fp);
程序运行结果:
(截屏)
输入:
输出:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 东北大学 编译 原理 实验
![提示](https://static.bdocx.com/images/bang_tan.gif)