编译原理词法分析器和语法分析器(急急急!!!)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

编译原理实验报告

词法分析器

实验目的

1.熟练掌握词法分析程序的基本原理

2.掌握词法分析程序的设计和实现

实验内容

1.针对一个简化的C语言子集完成对它的词法分析程序的设计与实现2.C语言子集的单词符号挤内码值

程序代码:

#include "stdio.h"

#include "string.h"

int i,j,k;

char s;

char a[20],token[20];

int letter()

{

if((s>=97)&&(s<=122))

return 1;

else return 0;

}

int digit()

{if((s>=48)&&(s<=57))

return 1;

else return 0;

}

void get()

{

s=a[i];

i=i+1;

}

void retract()

{i=i-1;}

int lookup()

{

if(strcmp(token, "while")==0)return 1;

else if(strcmp(token, "if")==0)return 2;

else if(strcmp(token,"else")==0)return 3;

else if(strcmp(token,"switch")==0)return 4;

else if(strcmp(token,"case")==0)return 5;

else return 0;

}

void main()

{printf("输入源程序,结束用'#':\n");

i=0;

do{i++;

scanf("%c",&a[i]);

}while(a[i]!='#');

i=1;

memset(token,0,sizeof(char)*20);

j=0;

get();

while(s!='#')

{if(s==' ')

get();

else

{switch(s){

case'a':

case'b':

case'c':

case'd':

case'e':

case'f':

case'g':

case'h':

case'i':

case'j':

case'k':

case'l':

case'm':

case'n':

case'o':

case'p':

case'q':

case'r':

case's':

case't':

case'u':

case'v':

case'w':

case'x':

case'y':

case'z':

while(letter(s)||digit(s))

{token[j]=s;

j++;

get();

}

retract();

k=lookup();

if(k==0)printf("(%d,%s)\n",6,token); else printf("(%d,unll)\n",k); break;

case'0':

case'1':

case'2':

case'3':

case'4':

case'5':

case'6':

case'7':

case'8':

case'9':

while(digit(s)){

token[j]=s;

j=j+1;

get();

}

retract();

printf("(%d,%s)\n",7,token); break;

case'+':printf("(+,null)\n"); break;

case'-':printf("(-,null)\n");

break;

case'*':printf("(*,null)\n");

break;

case'<':

get();

if(s=='=')

printf("(relop,LE)\n");

else {

retract();

printf("(relop,LT)\n");

}

break;

case'=':

get();

if(s=='=')printf("(relop,EQ)\n");

else{

retract();

printf("(=,null)\n");

}

break;

case';':printf("(;,null)\n");

break;

default:printf("(%c,error)\n",s);

break;

}

memset(token,0,sizeof(char)*10);

j=0;

get();

}

}

}

运行结果:

相关文档
最新文档