c词法分析器实验报告.doc
文本预览下载声明
PAGE
PAGE 19
c词法分析器实验报告
篇一:词法分析器实验报告
实验报告
实验题目:词法分析器
院系班级:计科系0901班
姓名学号: 2009210603
实验时间:2011-10-21
设计。编制并调试一个词法分析程序,加深对词法分析原理的理解。
实验要求
设计出一个简单的词法分析程序,能够识别关键字(包含begin、if、end、 while、else、 then)、标识符、数字及数种符号(+、-、*、/、(、)、:、=、:=、#、gt;、lt;、lt;gt;、lt;=、gt;=、;)。返回并打印各类字符所对应的种类编码及该字符所组成的二元组。
算法设计流程图
# include lt;stdio.hgt;
# include lt;string.hgt;
# include lt;stdlib.hgt;
# include lt;ctype.hgt;
typedef struct
{
int num;
char *word;
}WORD;
char token[255]=quot;quot;;
char input[255];
int t=0;
int i=0;
char gjz[6][10]={quot;beginquot;,quot;ifquot;,quot;thenquot;,quot;whilequot;,quot;doquot;,quot;endquot;};char ch;
WORD* start()
{
WORD*myword=new WORD;
myword-gt;num=1;
myword-gt;word=quot;quot;;
t=0;
ch=input[i];
i++;
while(ch==#39; #39;||ch==10)
{ ch=input[i];
i++;
}
if (isalpha(ch))
{
while(isalpha(ch)||isdigit(ch))
{
token[t]=ch;
t++;
token[t]=#39;\0#39;;
ch=input[i];
i++;
}
i--;
int n=0;
while(nlt;=6)
{
if(!strcmp(token,gjz[n])) {
myword-gt;num=n+1;myword-gt;word=token;return myword;
}
n++;
}//关键字
myword-gt;num=10;
myword-gt;word=token;
return(myword);
}//标识符
else if(isdigit(ch))
{
while (isdigit(ch))
{
token[t]=ch;
t++;
token[t]=#39;\0#39;;
ch=input[i];
i++;
}
i--;
myword-gt;num=11;
myword-gt;word=token;
return(myword);
}//数字
else
switch(ch)
{
case#39;+#39;:myword-gt;num=13;myword-gt;word=quot;+quot;;return(myword);break; case#39;-#39;:myword-gt;num=14;myword-gt;word=quot;-quot;;
return(myword);break; case#39;*#39;:myword-gt;num=15;myword-gt;word=quot;*quot;;return(myword);break; case#39;/#39;:myword-gt;num=16;myword-gt;word=quot;/quot;;return(myword);break; case#39;lt;#39;:ch=input[i];
i++;
if(ch==#39;gt;#39;)
{
myword-gt;num=21; myword-gt;word=quot;lt;gt;quot;; return(myword);}
else if (ch==#39;=#39;){
myword-gt;num=22; myword-gt;word=quot;lt;=quot;; return(myword);}
i--;
myword-gt;num=20;myword-gt;word=quot;lt;quot;;return(myword);break; case#39;gt;#39;:ch=input[i];
i++;
if(ch==#39;=#39;)
{
myword-gt;num=24; myword-gt;word=quot;gt;=quot;; return(myword);}
i-
显示全部