1、 理学理学与信息科学学院与信息科学学院 软件系统课程设计报告软件系统课程设计报告 设 计 题 目 操作系统:用银行家算法实现资源分配 编译原理:词法分析器 学生专业班级 学生姓名(学号) 设计小组其他同学姓名(学号) 指 导 教 师 完 成 时 间 2012 年 6 月 4 日 设 计 地 点 信息楼 139 机房 2012 年 6 月 7 日 (二)编译原理部分 一、实习题目 将词法分析器设计成单独的程序或供语法分析器调用的子程序,功能包括: 要求能够识别 数字、标识符、关键字、运算符等。 二、设计思路及算法描述 词法分析程序的功能: 输入源程序,输出单词符号,如图所示: 源程序 单词符号
2、处理过程:在扫描源程序字符串时,一旦识别出关键字、分隔符、标识符、无符号常数 中之一,即以单词形式(各类单词均采用相同的结构,即二元式编码形式)输出。每次 调用词法分析程序,它均能自动继续扫描下去,形成下一个单词,直至整个源程序全部 扫描完毕,并形成相应的单词串形式的源程序。 本程序规定: (1)关键字“begin“,“end“,“if“,“then“,“else“,“while“,“write“,“read“, “do“, “call“,“const“,“char“,“until“,“procedure“,“repeat“ (2)运算符:“+“,“-“,“*“,“/“,“=“ (3)界符:“
3、,“,“,“,“;“,“,“,“.“,“(“,“)“,“:“ (4)其他标记 如字符串,表示以字母开头的标识符。 (5)空格、回车、换行符跳过。 对于一段可能的输入代码,其结果在屏幕上显示如下: ( 1 , 无符号整数) ( begin , 关键字 ) ( if , 关键字 ) ( +, 运算符 ) ( ; , 界符 ) ( a , 普通标识符 ) 关键字或标识符的判断:读入一串字符,将 ASCII 码在字母范围的字符存入数组中,将 该数组与设置好的关键字比较,如果相等则输出是关键字,否则继续读入直至下一字符 既非数字也非字母,输出为标识符; 数字的判断:若跟在字母后面则一起输出为标识符,否则
4、输出为数字; 界符、运算符的判断:直接判断其 ASCII 码 运行过程为: 1预处理:把源文件一个字符一个字符的读入词法分析程序设置的输入字符结构体数组中(输入缓 冲区),读入过程要删除多余的空格; 2源程序字符数组中获得单词, 编码为二元式.:二元式采用结构体数组存储, 把单词类型和词元记 录下来。 词法分析器 为了方便和适用起见,首先建立一个文本,进而在文本中进行 pascal 语言输入。输入完毕之后,就 可以进行从文本中取字符,进而把它放在一个数组中。之后再数组中进行取字符,之前要定义一个数 组, 定义一个指针指向数组, 为 first。 之后就用一个循环依次从数组中取字符, 假如是字符就放在 buf 中,first+;一次进行下去,期间要时刻与关键字指针数组进行比较如果相等就立马输出,并显示是 关键字此时将 buf 置为初值,