编译原理实验报告:实验一编写词法分析程序.doc

编译原理实验报告:实验一编写词法分析程序.doc

ID:57428287

大小:129.50 KB

页数:12页

时间:2020-08-17

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

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

1、编译原理实验报告实验名称:实验一编写词法分析程序实验类型:验证型实验指导教师:何中胜专业班级:13软件四姓名:丁越学号:电子邮箱:@qq.com实验地点:秋白楼B720实验成绩:日期:2016年3月18日一、实验目的通过设计、调试词法分析程序,实现从源程序中分出各种单词的方法;熟悉词法分析程序所用的工具自动机,进一步理解自动机理论。掌握文法转换成自动机的技术及有穷自动机实现的方法。确定词法分析器的输出形式及标识符与关键字的区分方法。加深对课堂教学的理解;提高词法分析方法的实践能力。通过本实验,应达到以下目标:1、掌握从源程序文件中读取有效字符的方法和产生源程序的内部表示文件的方法。

2、2、掌握词法分析的实现方法。3、上机调试编出的词法分析程序。二、实验过程以编写PASCAL子集的词法分析程序为例1.理论部分(1)主程序设计考虑主程序的说明部分为各种表格和变量安排空间。数组k为关键字表,每个数组元素存放一个关键字。采用定长的方式,较短的关键字后面补空格。P数组存放分界符。为了简单起见,分界符、算术运算符和关系运算符都放在p表中(编程时,还应建立算术运算符表和关系运算符表,并且各有类号),合并成一类。id和ci数组分别存放标识符和常数。instring数组为输入源程序的单词缓存。outtoken记录为输出内部表示缓存。还有一些为造表填表设置的变量。主程序开始后,先以

3、人工方式输入关键字,造k表;再输入分界符等造p表。主程序的工作部分设计成便于调试的循环结构。每个循环处理一个单词;接收键盘上送来的一个单词;调用词法分析过程;输出每个单词的内部码。⑵词法分析过程考虑将词法分析程序设计成独立一遍扫描源程序的结构。其流程图见图1-1。图1-1该过程取名为lexical,它根据输入单词的第一个字符(有时还需读第二个字符),判断单词类,产生类号:以字符k表示关键字;i表示标识符;c表示常数;p表示分界符;s表示运算符(编程时类号分别为1,2,3,4,5)。对于标识符和常数,需分别与标识符表和常数表中已登记的元素相比较,如表中已有该元素,则记录其在表中的位置

4、,如未出现过,将标识符按顺序填入数组id中,将常数变为二进制形式存入数组中ci中,并记录其在表中的位置。lexical过程中嵌有两个小过程:一个名为getchar,其功能为从instring中按顺序取出一个字符,并将其指针pint加1;另一个名为error,当出现错误时,调用这个过程,输出错误编号。2.实践部分所有识别出的单词都用两个字节的等长表示,称为内部码。第一个字节为t,第二个字节为i。t为单词的种类。关键字的t=1;分界符的t=2;算术运算符的t=3;关系运算符的t=4;无符号数的t=5;标识符的t=6。i为该单词在各自表中的指针或内部码值。表1-1为关键字表;表1-2为分

5、界符表;表1-3为算术运算符的i值;表1-4为关系运算符的i值。关键字表指针l关键字0BEGIN1DO2ELSE3EN4IF5THEN6VAR7WHILE表1-1分界符表指针l分界符0,1;2。3:=4(5)6:7"表1-2算术运算符指针l算术运算符10H+11H-20H*21H/表1-3关系运算符指针l关系运算符00H<01H<=02H=03H>04H>=05H<>表1-4常数表和标识符表是在编译过程中建立起来的。其i值是根据它们在源程序中出现的顺序确定的。另外可以根据Pascal语言子集中出现其它单词情况进行自行修改以上表格。最后编写程序进行词法分析,判断目标在哪个表中并进行显

6、示。三、实验结果1.测试数据数据共分为3组,分别如下:第一组数据vari,j,k:integer;begini:=5;j:=6;k:=i+j;write("k=",k);End.第二组数据vari,sum:integer;beginsum:=0;fori:=1to10dobeginsum:=sum+i;end;writeln("sum=",sum);End.第三组数据varweight,price:real;beginwrite("pleaseinputweight:");readln(weight);ifweight<10thenprice=5;elseprice=5+(weig

7、ht-10)*0.4;writeln("price=",price);End.这三组数据都是通过文件“test.txt”读入到程序中,通过程序一一读取文件中的数据进行分析,程序分析时要注意所属的类型。2.测试结果以上三组数据测试结果通过控制台显示,显示时要根据表进行分类,不同的表有不同的标号,具体显示如图1-1,1-2,1-3,和1-4所示:第一组数据图1-2第二组数据图1-3第三组数据图1-4图1-4(接图1-5)四、讨论与分析实验结果的每一条数据可分为两个部分。第

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

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

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