实验一词法分析器设计

实验一词法分析器设计

ID:2108815

大小:39.00 KB

页数:2页

时间:2017-11-14

实验一词法分析器设计_第1页
实验一词法分析器设计_第2页
资源描述:

《实验一词法分析器设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、实验一 词法分析器设计【实验目的】1.掌握生成词法分析器的方法,加深对词法分析原理的理解。2.掌握设计、编制并调试词法分析程序的思想和方法。3.本实验是高级语言程序设计、数据结构和编译原理中词法分析原理等知识的综合。【实验内容及要求】1.选择一种熟悉的高级语言(如C语言,C++,VB或VC等),设计、编写、调试一个词法分析子程序。2.待分析的源程序为一个简单的C语言程序,如下所示:main(){intx,a,b;floaty,c,d;x=a+b;y=c/d;if(x>y)x=10;elsey=100;}

2、将该源程序的源文件经词法分析后输出以二元组形式表示的单词符号序列。3.编写的程序具有一定的查错能力。提交的实验报告中要有实验名称、实验目的、实验内容、实验程序清单、调试过程和运行结果,程序的主要部分作出功能说明,并有实验收获体会或改进意见等内容。【实验预习提示】1.词法分析器的功能和输出格式词法分析器的功能是输入以字符串表示的源程序,输出单词符号或单词符号序列。词法分析器的单词符号常常表示成以下的二元组(单词的种别码,单词符号的属性值)。本实验中,采用的是一符一种种别码的方式。2.调试程序文法的EBNF

3、(扩展巴科斯范式)表示如下<程序>::=main()<语句串><语句串>::=<语句>{;<语句>}<语句>::=<赋值语句>

4、<条件语句>

5、<循环语句><赋值语句>::=<变量>=<表达式><条件语句>::=if<条件>then<语句><循环语句>::=while<条件><语句串><条件>::=<表达式><关系运算符><表达式><表达式>::=<项>{+<项>

6、—<项>}<项>::=<因子>{*<因子>

7、/<因子>}<因子>::=<变量>

8、<无符号整数>

9、<表达式><无符号整数>::=<数字>{<数字

10、>}<变量>::=<标识符><标识符>::=<字母>{<字母>

11、<数字>

12、<下划线>}<关系运算符>::=>

13、<

14、>=

15、<=

16、==

17、!=<字母>::=A

18、B

19、C

20、……

21、Z

22、a

23、b

24、c

25、……

26、z(要求不区分大小写)<数字>::=0

27、1

28、2

29、3

30、4

31、5

32、6

33、7

34、8

35、93.“超前搜索”方法  词法分析时,常常会用到超前搜索方法。如当前待分析字符串为“a>+”,当前字符为’>’,此时,分析器倒底是将其分析为大于关系运算符还是大于等于关系运算符呢?显然,只有知道下一个字符是什么才能下结论。于是分析器读入下一个字符

36、’+’,这时可知应将’>’解释为大于运算符。但此时,超前读了一个字符’+’,所以要回退一个字符,词法分析器才能正常运行。在分析标识符,无符号整数等时也有类似情况。4.词法分析程序主程序的算法思想算法的基本思想是根据扫描到单词符号的第一个字符的种类,拼写出相应的单词符号,其实现的基本任务是从字符串表示的源程序中识别出相应的具有独立意义的单词符号。主程序示意图如图1.1所示。初始化并设置初始值调用扫描子程序输出单词二元组输入串结束了吗?YN结束图1.1词法分析主程序示意图其中设置初始值包括两个方面:(1)关

37、键字表的初值关键字作为特殊标识符处理,把它们预先安排在一张表中,称这张表为关键字表,当扫描程序识别出标识符时,查关键字表,若能查找到匹配的单词,则该单词是关键字,否则为一般标识符。关键字表为一个字符串数组,其描述为:char*KEY_WORDS[8]={“main”,”int”,”char”,”if”,”else”,”while”,”for”};(2)程序中需要用到的主要变量为syn,token和sum。

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

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

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