词法分析器实验报告

时间: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字,全部文档内容请下载后查看。喜欢就下载吧 ……
词法分析器实验报告.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:4.9 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:19元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219