编译原理实验报告——词法分析器和LL(1)文法

编译原理实验报告——词法分析器和LL(1)文法

ID:38526128

大小:230.73 KB

页数:17页

时间:2019-06-14

编译原理实验报告——词法分析器和LL(1)文法_第1页
编译原理实验报告——词法分析器和LL(1)文法_第2页
编译原理实验报告——词法分析器和LL(1)文法_第3页
编译原理实验报告——词法分析器和LL(1)文法_第4页
编译原理实验报告——词法分析器和LL(1)文法_第5页
资源描述:

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

1、《编译原理》综合性实验报告实验学期2016至2017学年第1学期专业计算机科学与技术班级1403学生姓名黄世增学号1411640305任课教师赵曦实验成绩17《编译原理》课程综合性实验报告开课实验室:C2102016年12月6日实验题目词法分析器的设计一、实验目的通过设计、编制、调试一个具体的词法分析程序,实现对高级程序设计语言源程序进行扫描,并将其分解为各种单词的词法分析方法;加深对课堂教学的理解;提高词法分析方法的实践能力。二、实验要求任选一种高级程序设计语言编程完成词法分析器。词法分析器应以教材所述分词原

2、理为依据,使用恰当的数据结构和方法,结构清晰、高效。编制一个读单词过程,源程序保存在文本文件中(也可键盘输入),读取该文件,识别出各个具有独立意义的单词,即关键字、标识符、常数、运算符、分界符五大类。依次输出各个单词的内部单词种别及单词符号自身值,遇到错误时可显示“Eorror”,然后跳过错误部分继续显示。二、实验设备与环境1.硬件:PC机Pentium100以上。2.软件:Win10,VS2010。三、实验内容1.正规文法<关键字>->int

3、for

4、while

5、do

6、return

7、break

8、continu

9、e<运算符和界符>->

10、+

11、-

12、*

13、/

14、==

15、<

16、<=

17、!=

18、>

19、>=

20、,

21、;

22、(

23、)

24、{

25、}<标识符>->letter(letter

26、digit)*<整型常数>->digitdigit*2.算法思想算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼接出相应的单词符号。2.1主程序17置初值调用扫描子程序将结果存入结构体输入串结束否是输出单词二元组结束图1词法分析主程序示意图其中初始包括关键字、运算符、界限符的置初值。2.2扫描子程序的算法思

27、想:在词法分析中,先以只读方式读取一个文件,自文件头开始扫描文本,滤去开头的空格、回车符、换行符等。读取的字符送入word。扫描第一个字符,看匹配的类型,并进行相应的类型分析,满足判断类型时,输出其种别码和值。17忽略空格text是否扫描结束返回是是否字母拼字符串数字其他运算符、符号界符等符号是否关键字?返回拼数否(4/5,单词自身值)报错(2,单词自身值)是(1,单词自身值)(3,单词自身值)图2扫描子程序四、实验步骤编写程序时,先定义几个全局变量,key[]事先存放7个关键字,words[]用来存放识别出来

28、的单词二元组,text用来存放从文件读取的内容,word用于存放识别出来的单词,length存放字符个数,k存放识别出来的单词个数。17首先,将文本内容读取到text中,文本内容最后一个字符是空白符,然后调用scan方法,逐个扫描每个字符,如果word的第一个字符是字母,则进行拼字符串,再判断是关键字还是标识符;如果word的第一个字符是数字,则在word清空之前判断是否有识别出非数字字符,若有,则出错,若没有,则识别出来的字符串是常数;若word第一个字符是运算符或界限符,则各自存到words[]中。最后扫描

29、结束后输出。五、实验结果及分析六、实验小结和思考通过这次实验,我对词法分析器有了进一步的了解,而且对词法分析和语法分析在实践中的应用有了深入的掌握,让我对高级语言的学习有了更深的认识,了解得更透彻。七、源程序清单17#include#include#includeusingnamespacestd;#defineMAX10000structWordString{stringWord;//单词intcategory;//类别};char*key[7]={"in

30、t","for","while","do","return","break","continue"};//关键字WordStringwords[MAX];//创建一个单词符号串stringtext;//读入的文本存入text中stringword;//分割出的单词用word表示intlength;//字符个数intk;//总单词个数voidscan(){inti,j;k=0;word="";for(i=0;i<=length-1;i++){if(word!=""){if(((word[0]>='A')&&(wo

31、rd[0]<='Z'))

32、

33、((word[0]>='a')&&(word[0]<='z')))//首字符是字母{if(((text[i]>='A')&&(text[i]<='Z'))

34、

35、((text[i]>='a')&&(text[i]<='z'))

36、

37、((text[i]>=48)&&(text[i]<=57))){word+=text[i];}else{words[k].Word=w

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

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

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