编译原理实验报告--词法分析器.doc

编译原理实验报告--词法分析器.doc

ID:56831346

大小:254.00 KB

页数:18页

时间:2020-07-15

编译原理实验报告--词法分析器.doc_第1页
编译原理实验报告--词法分析器.doc_第2页
编译原理实验报告--词法分析器.doc_第3页
编译原理实验报告--词法分析器.doc_第4页
编译原理实验报告--词法分析器.doc_第5页
资源描述:

《编译原理实验报告--词法分析器.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、编译原理实验—词法分析器一、实验目的通过动手实践,使学生对构造编译系统的基本理论、编译程序的基本结构有更为深入的理解和掌握;使学生掌握编译程序设计的基本方法和步骤;能够设计实现编译系统的重要环节。同时增强编写和调试程序的能力。一、实验内容及要求对某特定语言A,构造其词法规则。该语言的单词符号包括:保留字(见左下表)、标识符(字母大小写不敏感)、整型常数、界符及运算符(见右下表)。功能要求如下所示:·按单词符号出现的顺序,返回二元组序列,并输出。·出现的标识符存放在标识符表,整型常数存放在常数表,并输出这两个表格。·如果出现词法错误,报出:错误类型,位置(行,列)。·处理段注释

2、(/**/),行注释(//)。·有段注释时仍可以正确指出词法错误位置(行,列)。二、实验过程1、词法形式化描述使用正则文法进行描述,则可以得到如下的正规式:其中ID表示标识符,NUM表示整型常量,RES表示保留字,DEL表示界符,OPR表示运算符。A→(ID

3、NUM

4、RES

5、DEL

6、OPR)*ID→letter(letter

7、didit)*NUM→digitdigit*letter→a

8、…

9、z

10、A

11、…

12、Zdigit→0

13、…

14、9RES→program

15、begin

16、end

17、var

18、int

19、and

20、or

21、not

22、if

23、then

24、else

25、while

26、doDEL→(

27、)

28、.

29、;

30、,O

31、PR→+

32、*

33、:=

34、>

35、<

36、=

37、>=

38、<=

39、<>如果关键字、标识符和常数之间没有确定的算符或界符作间隔,则至少用一个空格作间隔。空格由空白、制表符和换行符组成。2、单词种别定义;A语言中的单词符号及其对应的种别编码如下表所示:单词符号种别编码单词符号种别编码program1+16begin2*17end3(18var4)19int5,20and6.21or7:=22not8;23if9>24then10<25else11=26while12>=27do13<=28标识符14<>29整型常量15-301、状态转换图;语言A的词法分析的状态转换图如下所示:空格符,制表符或回车符字

40、母或数字非字母或数字2字母01数字非数字3+4数字587*633()2224非=其他-142513812):>9,.=101115;/16=28/*2627其他23=1718>19非=<=212025其他1、运行环境介绍;本次实验采用MyEclipse进行代码的编写和编译及运行,编写语言为java语言;程序的运行环境为windows7旗舰版2、关键算法的流程图及文字解释;程序中用到的函数列表:A类定义各种类函数以及包含主函数publicstaticvoidmain()变量ch储存当前最新读进的字符的地址strToken存放当前字符串main()//主函数Analysis()/

41、/分析函数,每次读入一行文件,进行识别处理;charGetChar();//取得当前位置的字符的内容放入ch,并提前指向下一个字符;charGetNextChar();//取得当前位置的下一位置的字符,StringConCat();//将ch指向的字符连接到strToken后面isLetter();//判断ch指向的字符是否字母isDigit();//判断ch指向的字符是否数字add(p,str);//向p表中插入当前strToken的字符串BooleanfindKeyWord(str);//检测当前strToken中的字符串是否保留字,若是,则执行getKeyWordKey

42、(str),返回保留字的id,否则,判别其是否是已存在的标示符,若是,返回标示符的id以及该标示符在表中的位置;findPunctuation()//判断是否是一个保留的符号;getindex()//返回已经识别的标示符或者是数字的位置下标;Booleanexist();//检测当前strToken中的字符串是否在标识符表中已存在,若是,则返回true,否则返回falsevoidcallError();//出错处理过程,将错误的位置报告出来(1)main()函数的流程图如下:开始类初始化,变量的初始化,准备执行main()函数调用Analyse()函数分析输出结果表结束(2)

43、具体分析流程图:Analyse(str)函数读取第一个字符赋给变量Ch判断ch内容?如果ch是字符,则转入标示符与保留字判断程序如果ch是数字,则转入数字判别处理程序如果ch是标点,那么在标点的保留表中查找符号如果ch是空字符,那么就转到空字符处理程序处理CallError()处理程序报错判别出符号之后,Ch=NextChar(),index未超界返回main()函数继续判读IndexoutofBound6、测试报告(测试用例,测试结果);首先输入一个不含错误的程序(两种注释)进行检测:运行后在控制台上

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

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

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