词法分析文档 1Word下载.docx
- 文档编号:17229945
- 上传时间:2022-11-29
- 格式:DOCX
- 页数:11
- 大小:162.82KB
词法分析文档 1Word下载.docx
《词法分析文档 1Word下载.docx》由会员分享,可在线阅读,更多相关《词法分析文档 1Word下载.docx(11页珍藏版)》请在冰豆网上搜索。
/*包含字符串处理库*/
#define_KEY_WORD_END"
waitingforyourexpanding"
/*定义关键字结束标志*/
typedefstruct/*单词二元组的结构*/
{
inttypenum;
char*word;
}WORD;
charinput[255];
/*输入缓冲区*/
chartoken[255]="
"
;
/*单词缓冲区*/
intp_input;
/*输入缓冲区指针*/
intp_token;
/*单词缓冲区指针*/
charch;
/*当前读入字符*/
char*rwtab[]={"
begin"
"
if"
then"
while"
do"
end"
_KEY_WORD_END};
/*关键字数组*/
/*需要用到的自编函数参考实现*/
charm_getch(){/*从输入缓冲区读取一个字符到ch中*/
ch=input[p_input];
p_input=p_input+1;
return(ch);
}
voidgetbc(){/*去掉空白符号*/
while(ch=='
'
||ch==10){
ch=input[p_input];
p_input=p_input+1;
}
voidconcat(){/*拼接单词*/
token[p_token]=ch;
p_token=p_token+1;
token[p_token]='
\0'
intletter(){/*判断是否是字母*/
if(ch>
='
a'
&
ch<
z'
||ch>
A'
Z'
)return1;
elsereturn0;
intdigit(){/*判断是否是数字*/
0'
9'
intreserve(){/*检索关键字表格*/
inti=0;
while(strcmp(rwtab[i],_KEY_WORD_END)){
if(!
strcmp(rwtab[i],token)){
returni+1;
}
i=i+1;
return10;
voidretract(){/*回退一个指针*/
p_input=p_input-1;
WORDTokenize(){/*词法扫描程序*/
WORDlexical;
lexical.typenum=10;
lexical.word="
p_token=0;
m_getch();
getbc();
if(letter()){
while(letter()||digit()){
concat();
m_getch();
retract();
lexical.typenum=reserve();
lexical.word=token;
returnlexical;
elseif(digit()){
while(digit()){
lexical.typenum=11;
elseswitch(ch){
case'
+'
:
lexical.typenum=13;
lexical.word="
+"
returnlexical;
break;
-'
lexical.typenum=14;
-"
*'
lexical.typenum=15;
*"
/'
lexical.typenum=16;
/"
'
m_getch();
if(ch=='
){
lexical.typenum=18;
lexical.word="
="
returnlexical;
}retract();
lexical.typenum=17;
<
lexical.typenum=22;
}
elseif(ch=='
>
lexical.typenum=21;
retract();
lexical.typenum=20;
lexical.typenum=24;
lexical.typenum=23;
lexical.typenum=25;
lexical.typenum=26;
('
lexical.typenum=27;
("
)'
lexical.typenum=28;
)"
lexical.typenum=1000;
OVER"
default:
lexical.typenum=-1;
ERROR"
voidmain()/*主函数*/
intover=1;
printf("
EnterYourwords(endwith#):
);
scanf("
%[^#]s"
input);
//指针回退为0
p_input=0;
Yourwords:
\n%s\n"
while(over<
1000&
over!
=-1)/*对源程序进行分析,直至结束符#*/
{
lexical=Tokenize();
/*获得一个新单词*/
if(lexical.typenum<
1000)
printf("
(%d,%s)"
lexical.typenum,lexical.word);
/*打印种别码和单词自身的值*/
over=lexical.typenum;
\npress#toexit:
/*按#退出*/
输入为数字时,结果为:
输入为字符时,结果为:
3、写程序过程中遇到的问题:
1,主函数内,在判断万用户输入的字符串后,没有将prog[]的数组下标p赋值为0,所以程序不是从字符串的最开始执行,所以运行出不正确的结果,后来注意到添加的注释(从头扫描源程序),修改后运行成功。
2,刚开始不了解:
=、<
=等符号等如何判断,尝试几次后皆失败,后来又仔细阅读了术中所给的程序才了解了具体过程。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 词法分析文档 词法 分析 文档