词法分析器实验报告
时间:2026-01-17
时间:2026-01-17
词法分析器实验报告
实验报告
实验题目:词法分析器
院系班级:计科系0901班
姓名学号: 2009210603
实验时间:2011-10-21
词法分析器实验报告
设计。编制并调试一个词法分析程序,加深对词法分析原理的理解。
实验要求
设计出一个简单的词法分析程序,能够识别关键字(包含begin、if、end、 while、else、 then)、标识符、数字及数种符号(+、-、*、/、(、)、:、=、:=、#、>、<、<>、<=、>=、;)。返回并打印各类字符所对应的种类编码及该字符所组成的二元组。
算法设计流程图
词法分析器实验报告
# include <stdio.h>
# include <string.h>
# include <stdlib.h>
# include <ctype.h>
typedef struct
{
int num;
char *word;
}WORD;
char token[255]="";
char input[255];
int t=0;
int i=0;
char gjz[6][10]={"begin","if","then","while","do","end"};
char ch;
WORD* start()
{
WORD*myword=new WORD;
myword->num=1;
myword->word="";
t=0;
ch=input[i];
i++;
while(ch==' '||ch==10)
{ ch=input[i];
i++;
}
if (isalpha(ch))
{
while(isalpha(ch)||isdigit(ch))
{
token[t]=ch;
t++;
token[t]='\0';
ch=input[i];
i++;
词法分析器实验报告
}
i--;
int n=0;
while(n<=6)
{
if(!strcmp(token,gjz[n]))
{
myword->num=n+1;
myword->word=token;
return myword;
}
n++;
}//关键字
myword->num=10;
myword->word=token;
return(myword);
}//标识符
else if(isdigit(ch))
{
while (isdigit(ch))
{
token[t]=ch;
t++;
token[t]='\0';
ch=input[i];
i++;
}
i--;
myword->num=11;
myword->word=token;
return(myword);
}//数字
else
switch(ch)
{
case'+':myword->num=13;
myword->word="+";
return(myword);break;
case'-':myword->num=14;
myword->word="-";
词法分析器实验报告
return(myword);break;
case'*':myword->num=15;
myword->word="*";
return(myword);break;
case'/':myword->num=16;
myword->word="/";
return(myword);break;
case'<':ch=input[i];
i++;
if(ch=='>')
{
myword->num=21;
myword->word="<>";
return(myword);
}
else if (ch=='=')
{
myword->num=22;
myword->word="<=";
return(myword);
}
i--;
myword->num=20;
myword->word="<";
return(myword);break;
case'>':ch=input[i];
i++;
if(ch=='=')
{
myword->num=24;
myword->word=">=";
return(myword);
}
i--;
myword->num=23;
myword->word=">";
return(myword);break;
case':':ch=input[i];
i++;
if (ch=='=')
{
myword->num=18;
myword->word=":=";
return(myword);
词法分析器实验报告
}
i--;
myword->num=17;
myword->word=":";
return(myword);
break;
case';':myword->num=26;
myword->word=";";
return(myword);break;
case'(':myword->num=27;
myword->word="(";
return(myword);break;
case')':myword->num=28;
myword->word=")";
return(myword);break;
case'=':myword->num=27;
myword->word="=";
return(myword);break;
case'#':myword->num=0;
myword->word="#";break;
case'\0':myword->num=1000;
myword->word="OVER";break;
default: myword->num=-1;
myword->word="error";
return(myword);break;
}//符号
}
void main()
{
WORD* newword=new WORD;
printf("input your words:(end with #)\n");
scanf("%[^#]s",input);
while(newword->num!=1000)
{
newword=start();
printf("(%d,%s) ",newword->num,newword->word);
}
}
词法分析器实验报告
实验结果
心得体会
通过这次实验更加深入的理解了词法分析器的功能及原理,也通过这次实验锻炼了自己编写算法及c程序的能力,虽然实验中存在不足但经过努力一一克服了,今后也会经常锻炼提高自己的能力。
…… 此处隐藏:562字,全部文档内容请下载后查看。喜欢就下载吧 ……上一篇:项目七 使用Word排版多页文档
下一篇:超化三初中大课间活动实施方案