欢迎来到天天文库
浏览记录
ID:32495663
大小:335.50 KB
页数:8页
时间:2019-02-08
《词法分析器设计报告》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、《词法分析器》设计报告班级:计科1班任课老师:丁志军成员:陈炼(1352364)、赵婧杰(1352360)、刘玉晓(1352324)8目录1题目32软件功能33设计思路34物理结构35开发平台56系统的运行结果分析说明57参考文献781题目了解PL/0词法、语法规则,对PL/0示例程序实现词法分析,并输出分析结果。2软件功能1、读入以.txt为后缀的源程序文件,且该文件为pl/0语法规则;2、对读入的源程序进行词法分析,识别出“关键字、标识符、常数、运算符/界符”四种类型:a.关键字:"PROGRA
2、M","BEGIN","END","CONST","VAR","WHILE","DO","IF","THEN"b.标识符:由字母开头,字母、数字、或下划线组成的名字;c.常数:由0-9纯数字组成的字;d.运算符/界符:"+","-","*","/",":=","=","<",">",">=","<=","(",")",";",","3、输出各单词符号及其所属种别。3设计思路1、读取.txt文件,把源程序按行存储到buf数组,且每行不超过100个字符;2、写词法分析函数,划为多个判断分支:a.首先判断
3、是否为“常数”:倘若第一个字符为数字,则读完整个单词,若都为常数,则输出该单词;b.然后判断是否为“算符/界符”:倘若第一个字符等于上述列出的符号,则进入该分支,进行下一步的判断,并输出;c.最后判断是否为“关键字”或“标识符”:先判断第一个字符是否为大写字母,若不是,则进一步判断是否为标识符;是的话则判断,该单词是否等于上述9个关键字中的某一个,若是,则输出为关键字,否则为标识符;3、主函数main()则负责输出程序操作提示,如输入源文件名字,读入文件、调用子程序等功能。4物理结构1、头文件:(1
4、)#include;(2)#include;(3)#include.2、全局变量(1)buf[LINE]:LINE=100,为源程序每行至多存放的字符数,buf数组按行存放字符;(2)length:记录每行长度;8(3)key[9]:存放了9个关键字;(4)ch[15]:存放了所有的算符/界符.3、函数:(1)readfile(FILE*fp):读取.txt文件,只读取一行(2)lexical(char*buf,intlength)(词法分析
5、函数):a.判断是否为“常数”:if(buffer[i]=='0'
6、
7、buffer[i]=='1'
8、
9、buffer[i]=='2'
10、
11、buffer[i]=='3'
12、
13、buffer[i]=='4'
14、
15、buffer[i]=='5'
16、
17、buffer[i]=='6'
18、
19、buffer[i]=='7'
20、
21、buffer[i]=='8'
22、
23、buffer[i]=='9'){cout<<"常数"<24、25、buffer[i]=='1'26、27、buf28、fer[i]=='2'29、30、buffer[i]=='3'31、32、buffer[i]=='4'33、34、buffer[i]=='5'35、36、buffer[i]=='6'37、38、buffer[i]=='7'39、40、buffer[i]=='8'41、42、buffer[i]=='9')cout<43、44、buffer[i]=='-'45、46、buffer[i]=='*'47、48、buffer[i]=='/'49、50、buf51、fer[i]=='='52、53、buffer[i]=='('54、55、buffer[i]==')'56、57、buffer[i]==';'58、59、buffer[i]==',')cout<<"算符/界符"<<""<'60、61、buffer[i]=='<'){if(buffer[i+1]=='=')cout<<"算符/界符"<<""<62、<='A'&&buffer[i]<='Z'){chara1[]="PROGRAM";chara2[]="BEGIN";chara3[]="END";chara4[]="CONST";chara5[]="VAR"
24、
25、buffer[i]=='1'
26、
27、buf
28、fer[i]=='2'
29、
30、buffer[i]=='3'
31、
32、buffer[i]=='4'
33、
34、buffer[i]=='5'
35、
36、buffer[i]=='6'
37、
38、buffer[i]=='7'
39、
40、buffer[i]=='8'
41、
42、buffer[i]=='9')cout<43、44、buffer[i]=='-'45、46、buffer[i]=='*'47、48、buffer[i]=='/'49、50、buf51、fer[i]=='='52、53、buffer[i]=='('54、55、buffer[i]==')'56、57、buffer[i]==';'58、59、buffer[i]==',')cout<<"算符/界符"<<""<'60、61、buffer[i]=='<'){if(buffer[i+1]=='=')cout<<"算符/界符"<<""<62、<='A'&&buffer[i]<='Z'){chara1[]="PROGRAM";chara2[]="BEGIN";chara3[]="END";chara4[]="CONST";chara5[]="VAR"
43、
44、buffer[i]=='-'
45、
46、buffer[i]=='*'
47、
48、buffer[i]=='/'
49、
50、buf
51、fer[i]=='='
52、
53、buffer[i]=='('
54、
55、buffer[i]==')'
56、
57、buffer[i]==';'
58、
59、buffer[i]==',')cout<<"算符/界符"<<""<'
60、
61、buffer[i]=='<'){if(buffer[i+1]=='=')cout<<"算符/界符"<<""<62、<='A'&&buffer[i]<='Z'){chara1[]="PROGRAM";chara2[]="BEGIN";chara3[]="END";chara4[]="CONST";chara5[]="VAR"
62、<='A'&&buffer[i]<='Z'){chara1[]="PROGRAM";chara2[]="BEGIN";chara3[]="END";chara4[]="CONST";chara5[]="VAR"
此文档下载收益归作者所有