编译原理实验报告 词法分析

编译原理实验报告 词法分析

ID:38635605

大小:419.00 KB

页数:21页

时间:2019-06-16

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

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

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、

25、else

26、while

27、doDEL→(

28、)

29、.

30、;

31、,OPR→+

32、*

33、:=

34、>

35、<

36、=

37、>=

38、<=

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

40、-302、状态转换图;语言A的词法分析的状态转换图如下所示:空格符,制表符或回车符字母或数字非字母或数字2字母01数字非数字3+4数字587*633()2224非=其他-142513812):>9,.=101115;/16=28/*2627其他23=1718>19非=<=212025其他1、运行环境介绍;本次实验采用win-tc进行代码的编写和编译及运行程序的运行环境为windows2、关键算法的流程图及文字解释;程序中用到的函数列表:变量ch储存当前最新读进的字符的地址strToken存放当前字符串voidmain()//主函数structbin

41、ary*lexicalAnalyze();//词法分析的主函数,返回一个二元组的指针voidGetBC();//检查ch指向的字符是否为空格、制表或回车符,如果是则调用GetChar()直至不是上述字符voidGetChar();//ch前移一个地址单元intConCat();//将ch指向的字符连接到strToken之后intisLetter();//判断ch指向的字符是否字母intisDigit();//判断ch指向的字符是否数字intinsertId();//向标识符表中插入当前strToken的字符串intinsertConst();//将

42、strToken的常数插入常数表中intReserved();//检测当前strToken中的字符串是否保留字,若是,则返回编码,否则返回0intisId();//检测当前strToken中的字符串是否在标识符表中已存在,若是,则返回其编号,否则返回0intisConst();//检测当前strToken中的字符串是否在常数表中已存在,若是,则返回其编号,否则返回0voiderrProc(interrType);//出错处理过程,errType是错误类型,将错误信息加入错误表中main()函数的流程图如下:开始程序的初始化操作:将文件的内容读入内存

43、;保留字、标识符、常数和错误表初始化;ch指针初始化若有错误发生,则跳至下一个单词开始,否则输出二元组执行LexicalAnalyze()否到达数据尾部是输出标识符表,常数表和错误表回收内存结束lexicalAnalyze()函数的流程图如下所示:开始GetBC()到达数据尾部否否是IsLetter()ConCat()GetChar()Reserved()是否否是isLetter()

44、

45、isDigit()InsertId()GetChar()ConCat()是isDigit()否isDigit()是否InsertConst()是否为运算符或界符否否

46、注释处理是是否为注释errProc()生成二元组结束Reserved()、isId()和isConst()函数均采用了对链

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

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

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