1、 编译原理课程实验报告实验题目: 某种简单程序语言的词法分析器的设计 与实现 专 业: 计算机科学与技术 班 级: 11060341 学 号: 11060341 姓 名: 实验目的:设 计 一 个 词 法 分 析 程 序 , 理 解 词 法 分 析 器 实 现 的 原 理 , 掌 握 程 序 设 计 语 言 中 的 各类 单 词 的 词 法 分 析 方 法 , 加 深 对 词 法 分 析 原 理 的 理 解 。实验任务:词 法 分 析 是 从 左 向 右 扫 描 每 行 源 程 序 的 符 号 , 拼 成 单 词 , 换 成 统 一 的 二 元 式 (单 词种 别 , 单 词 符 号 的 属
2、性 值 )表 示 。 对 给 定 的 程 序 通 过 词 法 分 析 器 识 别 一 个 个 单 词 符 号 , 并 以 二 元式(单 词 种 别 , 单 词 符 号 的 属 性 值 )显 示 , 本 程 序 则 是 通 过 对 给 定 程 序 段 分 析 后 以 单 词 符 号 和 文字 提 示 显 示 )实验流程:程序清单:#include#include#includeusing namespace std;int k=0;struct wordchar name10;int kind; word1000;char key3510= “scanf“,“short“,“int“,“long
3、“,“float“,“double“,“char“,“struct“,“union“,“printf“,“typedef“,“const“,“unsigned“,“signed“,“extern“,“register“,“static“,“volatile“,“void“,“if“,“else“,“switch“,“case“,“for“,“do“,“while“,“goto“,“continue“,“break“,“default“,“sizeof“,“return“,“include“,“bool“;bool cmp(char a)int i;for(int k=0; k=ach=ap;i
4、f(ch=|ch=)b0=;b1=ch;strcpy(wordk.name,b);wordk+.kind=5;ch=a+p;elseb0=;strcpy(wordk.name,b);wordk+.kind=5;else if(ch=)p+;ch=ap;if(ch=|ch=)b0=;b1=ch;strcpy(wordk.name,b);wordk+.kind=5;ch=a+p;elseb0=;strcpy(wordk.name,b);wordk+.kind=5;else if(ch=!)p+;ch=ap;if(ch=)b0=!;b1=;strcpy(wordk.name,b);wordk+.ki
5、nd=5;ch=a+p;elseb0=!;strcpy(wordk.name,b);wordk+.kind=5;else if(ch=ch=ap;if(ch=strcpy(wordk.name,b);wordk+.kind=5;ch=a+p;elseb0=strcpy(wordk.name,b);wordk+.kind=5;else if(ch=|)p+;ch=ap;if(ch=|)b0=b1=|;strcpy(wordk.name,b);wordk+.kind=5;ch=a+p;elseb0=|;strcpy(wordk.name,b);wordk+.kind=5;for(int i=0;
6、ik; i+)switch(wordi.kind)case 1:printf(“(标识符,“);break;case 2:printf(“(常量,“);break;case 3:printf(“(关键字,“);break;case 4:printf(“(界符,“);break;case 5:printf(“(运算符,“);break;printf(“%s)n“,wordi.name);int a1=0,a2=0,a3=0,a4=0,a5=0;for(int i=0;ik;i+)if(wordi.kind=1)a1+;else if(wordi.kind=2)a2+;else if(wordi.kind=3)a3+;else if(wordi.kind=4)a4+;else if(wordi.kind=5)a5+;printf(“标识符:%dn 常量:%dn 关键字:%dn 界符:%dn 运算符:%dn“,a1,a2,a3,a4,a5);return 0;运行结果: