词法分析程序的实现代码以及分析

词法分析程序的实现代码以及分析

ID:38966070

大小:61.00 KB

页数:9页

时间:2019-06-22

词法分析程序的实现代码以及分析_第1页
词法分析程序的实现代码以及分析_第2页
词法分析程序的实现代码以及分析_第3页
词法分析程序的实现代码以及分析_第4页
词法分析程序的实现代码以及分析_第5页
资源描述:

《词法分析程序的实现代码以及分析》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、实验一词法分析程序的实现一、实验目的掌握程序设计语言的词法分析程序的手工实现方法。二、实验内容构造miniC语言的词法分析程序,程序要求能对输入的字符串流进行词法分析,并输出相应的单词。miniC语言的单词包括整数、标识符、分隔符、运算符和关键字,编制相应的词法分析程序。三、实验参考1.根据以下的正规式,画出状态转换图;标识符ID=letter(letter

2、digit)*letter=a

3、..

4、z

5、A

6、..

7、Zdigit=0

8、..

9、9十进制整数0

10、(1

11、2

12、3

13、4

14、5

15、6

16、7

17、8

18、9)(0

19、1

20、2

21、3

22、4

23、5

24、6

25、7

26、8

27、9)*运算符+-*/<<====!=>>=分隔符()

28、{}[];,关键字ifelsereturnintvoidwhilemain2.单词的分类可将所有标识符归为一类;将整数归为一类(或者每种进制的整数各为一类);运算符、关键字和分隔符则可采取一词一类。3.建立符号表可事先建立一关键字表,以备在识别关键字时进行查询。变量名表及常数表则在词法分析过程中建立。4.程序的输出形式所输出的每一单词,均按形如(TOKEN,VALUE)的二元式编码。对于变量标识符和常数,TOKEN字段为相应的类别码,VALUE字段则是该标识符、常数在其对应符号表中登记项的序号。或者采用三元式(TYPE,TOKEN,VALUE),如下表:5.根据状态图,设计词

29、法分析函数intscan(),完成以下功能:1)从键盘或文件读入源程序数据,逐个分析出单词并输出其二/三元式。2)建立符号表,打印符号表中的值以供查看分析是否正确。在编程之前需要从简到复杂,考虑好用到的数据结构:A:先写出各类单词的识别功能,即能对给定的单词识别出是不是标识符,关键字等。B:之后把所有识别功能连接起来,能识别给出的字符串是哪个,打印提示(按二元式或三元式)C:从文件里读取字符串功能。识别出文件里所有单词类型,暂不考虑出错情况。D:设计符号表的数据结构,把识别到的标识符加入到符号表中。6.给出一个测试程序,调用函数scan(),输出单词种别和属性。比如测试程序如

30、下:voidmain(){inta,b;b=a*2;}四、实验报告要求1)词法的正规式描述2)画出状态转换图3)单词种别码定义说明(参见课本50页)4)词法分析程序使用的数据结构和主要算法说明。5)测试程序及其词法分析结果的显示。#include#include#includecharprog[80],token[8];charch;intsyn,p,m=0,n,row,sum=0;char*rwtab[6]={"begin","if","then","while","do","end"};voidscaner()

31、{/*共分为三大块,分别是标示符、数字、符号,对应下面的ifelseif和else*/for(n=0;n<8;n++)token[n]=NULL;ch=prog[p++];while(ch==''){ch=prog[p];p++;}if((ch>='a'&&ch<='z')

32、

33、(ch>='A'&&ch<='Z'))//可能是标示符或者变量名{m=0;while((ch>='0'&&ch<='9')

34、

35、(ch>='a'&&ch<='z')

36、

37、(ch>='A'&&ch<='Z')){token[m++]=ch;ch=prog[p++];}token[m++]='';p--;s

38、yn=10;for(n=0;n<6;n++)//将识别出来的字符和已定义的标示符作比较,if(strcmp(token,rwtab[n])==0){syn=n+1;break;}}elseif((ch>='0'&&ch<='9'))//数字{{sum=0;while((ch>='0'&&ch<='9')){sum=sum*10+ch-'0';ch=prog[p++];}}p--;syn=11;if(sum>32767)syn=-1;}elseswitch(ch)//其他字符{case'<':m=0;token[m++]=ch;ch=prog[p++];if(ch=='>'){

39、syn=21;token[m++]=ch;}elseif(ch=='='){syn=22;token[m++]=ch;}else{syn=23;p--;}break;case'>':m=0;token[m++]=ch;ch=prog[p++];if(ch=='='){syn=24;token[m++]=ch;}else{syn=20;p--;}break;case':':m=0;token[m++]=ch;ch=prog[p++];if(ch=='='){syn=18;token[m++]=ch;}el

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。