编译原理实验报告一、实验目的设计一个词法分析器程序, 改程序能完成如下功能: 输入的字符串中的单词有整数和以字母开头的标识符, 分析器能识别出单词并区分是整数还是标识符, 标识符中是否有 while 、 do、 if、 then 、 else 、 begin 、 end 、 and 、 or、 not 等保留字。若单词是整数则输出整数的编码及数值, 是标识符则判定是否为保留字, 是保留字则将保留字及其对应的编码输出, 否则输出标识符号及其编码。二、实验代码#include<> #include<> int baoliuzi(char m[]) { char *b[] = {"while","do","if","then","else","end","and","or","not"}; int c[]={3,5,0,1,2,6,39,40,41}; for(int i= 0;i<9;i++) { if(strcmp(m,b[i])==0) return c[i]; } return 56; } int number(char n[]) { for(int i=0;n[i]!=NULL;i++) if(!(n[i]>='0'&&n[i]<='9')) return 0; return 1; } void main() { char a[100][100]; int b[100]; int i,j; FILE *fp; fp=fopen("d:\\","r"); for(i=0;!feof(fp);i++) fscanf(fp,"%s",a[i]); fclose(fp); for(j=0;j<i;j++) { if(number(a[j])) { b[j]=57; continue; } if(a[j][0]>='a'&&a[j][0]<='z') { b[j]=baoliuzi(a[j]); continue; } b[j]=-1; } for(j=0;j<i;j++) printf("(%s,%d) ",a[j],b[j]); printf("\n"); } 三、实验结果实验所用文件截图:
编译原理实验报告38716 来自淘豆网www.taodocs.com转载请标明出处.