欢迎来到天天文库
浏览记录
ID:49659664
大小:452.00 KB
页数:19页
时间:2020-03-03
《编译原理实验-词法分析器的设计与实现.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、.南华大学计算机科学与技术学院实验报告(2018~2019学年度第二学期)课程名称编译原理实验名称词法分析器的设计与实现姓名学号专业班级地点教师Word资料.1.实验目的及要求实验目的加深对词法分析器的工作过程的理解;加强对词法分析方法的掌握;能够采用一种编程语言实现简单的词法分析程序;能够使用自己编写的分析程序对简单的程序段进行词法分析。实验要求1.对单词的构词规则有明确的定义;2.编写的分析程序能够正确识别源程序中的单词符号;3.识别出的单词以<种别码,值>的形式保存在符号表中,正确设计和维护符号
2、表;4.对于源程序中的词法错误,能够做出简单的错误处理,给出简单的错误提示,保证顺利完成整个源程序的词法分析;2.实验步骤1.词法分析规则<标识符>::=<字母>
3、<标识符><字母>
4、<标识符><数字><常数>::=<数字>
5、<数字序列><数字><数字序列>::=<数字序列><数字>
6、<数字>
7、<.><字母>::=a
8、b
9、c
10、……
11、x
12、y
13、z<数字>::=0
14、1
15、2
16、3
17、4
18、5
19、6
20、7
21、8
22、9<运算符>::=<关系运算符>
23、<算术运算符>
24、<逻辑运算符>
25、<位运算符>
26、<赋值运算符><算数运算符>::
27、=+
28、-
29、*
30、/
31、...
32、--<关系运算符>::=<
33、>
34、!=
35、>=
36、<=
37、==<逻辑运算符>::=&&
38、
39、
40、
41、!<位运算符>::=&
42、
43、
44、!<赋值运算符>::==
45、+=
46、-=
47、/=
48、*=<分界符>::=,
49、;
50、(
51、)
52、{
53、}
54、:
55、//
56、/**/<保留字>::=main
57、if
58、else
59、while
60、do
61、for
62、...
63、voidWord资料.2.单词符号的编码单词符号种别码单词符号种别码main0>26if1>=27else2<28while3<=29do4!30for5!=31switch6=32c
64、ase7==33int8(34double9)35float10{36long11}37void12;38+13:39+=14
65、40++15
66、
67、41-16数字42-=17标识符43--18,44&19//45&&20/**/46#21*22*=23/24/=25Word资料.3.状态转换图2字母非字母与数字1字母与数字0空白4数字非数字数字38/611+10=12!13=15其它3418<其它171921......&;,({},:)33其它2220=其它>1614+其它79*/=其它54.算法分析①
68、词法分析器工作的第一步是输入源程序文本。为了更好地对单词符号识别,把输入串预处理一下。预处理主要滤掉空格,跳过注释、换行符等。②对预处理后的输入串依次扫描单个字符,使用if-while嵌套语句和switchcase语句判断字符的类型,具体识别方法可看状态转换图。有时为了确定词性,需要超前扫描,若超前扫描的字符对识别当前单词无用处,则需要退还给输入串,以备识别下一单词字符时使用。Word资料.③若读入的字符与单词符号编码表的字符匹配不上,则报错,并输出出错行数。对识别处的单词符号以(单词符号,种别码)二
69、元式的形式输出。1.实验内容1.流程图Word资料.1.程序的变量与函数说明(1)input全局字符数组,用来存放输入串(2)word全局字符数组,用来存放获取到的单词符号,限定长度为8(3)ch全局字符变量,用来存放最新读入的字符(4)syn全局整型变量,表示单词符号的编码(5)p全局整型变量,表示当前字符在input数组的位置(6)m全局整型变量,表示最新读入的字符在word数组的下标(7)line全局整型变量,当前行数(8)keyword全局字符数组,存放关键字(9)init()获取输入串(10
70、)isKey()判断关键字的函数,若参数数组中是关键字,则把syn置为该关键字对应的编码并返回1,否则返回0(11)isLetter()判断字母的函数,若参数字符是字母,则返回1,否则返回0(12)isDigit()判断数字的函数,若参数字符是数字,则返回1,否则返回0(13)isSpace()判断空白符的函数,若参数字符是空格、TAB或换行符,则返回1,否则返回0(14)scaner()扫描输入串的函数,对读出的字符进行判断,若是单词符号表中的符号,则将syn置为对应的编码2.源程序#include
71、#includecharinput[1000];//输入串charword[8];//获取到的单词charch;intsyn;//种别码intp;intm;Word资料.intline;//行数//关键字charkeyword[][8]={"main","if","else","while","do","for","switch","case","int","double","float","long","void"
此文档下载收益归作者所有