1、 编译原理课程设计编译原理课程设计 题题 目:目: 词法分析器词法分析器 班班 级:级: 计算机科学系计算机科学系 09010901 班班 2012 年年 6 月月 08 日日 目录目录 1需求分析 1 1.1 问题描述 . 1 1.2 基本要求 . 1 2概要设计 1 2.1 待分析的简单语言词法 1 2.2 主要函数 . 2 2.2 流程图: . 3 3详细设计 4 4.调试与分析 8 4.1 解析源文件 8 4.2 调试与分析 9 4.3 运行结果 . 10 5用户手册.11 51 运行环境11 5.2 执行文件 11 6参考文献 12 7心得体会 12 8小组成员任务分配及工作进度安排
2、 12 1 1需求分析需求分析 1.1 问题描述问题描述 本次课程设计旨在是设计并实现一个具体的词法分析程序, 加深对词法分析 的原理的理解。该词法分析程序能输入源程序并输出单词符号。在扫描源程序字 符串时,一旦识别出关键字、分隔符、标识符、无符号常数中之一,即以单词形 式(各类单词均采用相同的结构,即二元式编码形式)输出。每次调用词法分析 程序,它均能自动继续扫描下去,形成下一个单词,直至整个源程序全部扫描完 毕,并形成相应的单词串形式的源程序。 1.2 基本基本要求要求 1对给定的程序通过词法分析器能够识别一个个单词符号,并以二元式(单词类 型,单词符号)显示; 2可以将要分析的程序保存到
3、文件中进行读取; 3删除无用的空白字符、回车符、及其它非实质性符号。 2概要设计概要设计 2.1 待分析的简单语言词法待分析的简单语言词法 (1)关键字“main“,“void“,“int“,“char“,“printf“,“scanf“,“else“,“if“,“return“ (2)运算符:“+“,“-“,“*“,“/“,“=“ (3)界符:“,“,“,“,“;“,“,“,“.“,“(“,“)“,“:“ (4)其他标记 如字符串,表示以字母开头的标识符。 (5)空格、回车、换行符跳过。 2 2.2 主要函数主要函数 int IsAlpha(char c)/判断是否为字母 int IsNum
4、(char c)/判断是否为数字 int IsKey(char *Word)/识别关键字函数 void scanner(FILE *fp)/扫描函数 3 2.2 流程图:流程图: 开始 输入源文 件路径 路径是否有 效 是 初始化文件指针 否 将字符加入字符数 组Word 是空格,空白或换 行吗 是字母吗是数字吗否否是界符吗否 打开源文件 跳过该字符 是 是 文件结束? 否 将字符加入字符数 组Word 否 将字符 加入字 符数组 Word 是 指向下一字符 识别指针内容 指向下一字符 是字母惑数字 吗 是 将word与关键 字表key进行匹 配 否 匹配? 是 输出word 为关键字 输出w
5、ord为 普通标示符 否 将字符加 入字符数 组Word 指向下一字符 输出word 为常数 识别指针内容 回退 是数字吗 是 否 输出word 为界符 指向下一字符 结束是 输出Word 内容为不 可识别 将字符 加入字 符数组 Word 4 3详细设计详细设计 #include #include #include #include char /定义关键字 *Key10=“main“,“void“,“int“,“char“,“printf“,“scanf“,“else“,“if“,“return“; char Word20,ch; / 存储识别出的单词流 int IsAlpha(char c
6、) /判断是否为字母 if(c=a)|(c=A) return 1; else return 0; int IsNum(char c) /判断是否为数字 if(c=0 else return 0; int IsKey(char *Word) /识别关键字函数 int m,i; for(i=0;i9;i+) if(m=strcmp(Word,Keyi)=0) if(i=0) return 2; return 1; return 0; void scanner(FILE *fp) /扫描函数 char Word20=0; char ch; int i,c; 5 ch=fgetc(fp); /获取字符,指针 fp 并自动指向下一个字符 if(IsAlpha(ch