.
南华大学
计算机科学与技术学院
实 验 报 告
( 2018~2019学年度 第二学期 )
课程名称 编译原理
实验名称 词法分析器的设计与
实现
学号
专业
班级
地点
. . .
教师
.
1. 实验目的及要求
实验目的
加深对词法分析器的工作过程的理解;加强对词法分析方法的掌握;能够采用一种编程语言实现简单的词法分析程序;能够使用自己编写的分析程序对简单的程序段进行词法分析。
实验要求
1. 对单词的构词规则有明确的定义;
2. 编写的分析程序能够正确识别源程序中的单词符号;
3. 识别出的单词以<种别码,值>的形式保存在符号表中,正确设计和维护
符号表;
4. 对于源程序中的词法错误,能够做出简单的错误处理,给出简单的错误
提示,保证顺利完成整个源程序的词法分析;
2. 实验步骤
1.词法分析规则
<标识符>::=<字母>|<标识符><字母>|<标识符><数字> <常数>::=<数字>|<数字序列><数字>
<数字序列>::=<数字序列><数字>|<数字>|<.> <字母>::=a|b|c|……|x|y|z <数字>::=0|1|2|3|4|5|6|7|8|9
<运算符>::=<关系运算符>|<算术运算符>|<逻辑运算符>|<位运算符>|<赋值运算符>
<算数运算符>::=+|-|*|/|...|-- <关系运算符>::=<|>|!=|>=|<=|== <逻辑运算符>::=&&| || |! <位运算符>::=&| | |! <赋值运算符>::==|+=|-=|/=|*=
<分界符>::=,|;|(|)|{|}|:| // |/**/
<保留字>::=main|if|else|while|do|for|...|void
. . .
.
2.单词符号的编码
单词符号 main if else while do for switch case int double float long void + += ++ - -= -- & && # * *= / /=
. . .
种别码 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 单词符号 > >= < <= ! != = == ( ) { } ; : | || 数字 标识符 , // /**/ 种别码 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 .
3.状态转换图
其它 5 = / * 其它 9 7 + 14 > = 其它 , ( : { ) }
& ; ,
20 其它 16 ....33 22
4.算法分析
①词法分析器工作的第一步是输入源程序文本。为了更好地对单词符号识别,把输入串预处理一下。预处理主要滤掉空格,跳过注释、换行符等。
②对预处理后的输入串依次扫描单个字符,使用if-while嵌套语句和switch case语句判断字符的类型,具体识别方法可看状态转换图。有时为了确定词性,需要超前扫描,若超前扫描的字符对识别当前单词无用处,则需要退还给输入串,以备识别下一单词字符时使用。
. . .
.
③若读入的字符与单词符号编码表的字符匹配不上,则报错,并输出出错行数。对识别处的单词符号以(单词符号,种别码)二元式的形式输出。
3. 实验容 1. 流程图
. . .