网站大量收购闲置独家精品文档,联系QQ:2885784924

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

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

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理实验报告 实验名称: 实验一编写词法分析程序 实验类型: 验证型实验 指导教师: 何 中 胜 专业班级: 13软件四 姓 名: 丁越 学 号: 电子邮箱: 862245792@ 实验地点: 秋白楼B720 实验成绩: 日期:2016年 3 月 18 日 一、实验目的 通过设计、调试词法分析程序,实现从源程序中分出各种单词的方法;熟悉词法分析 程序所用的工具自动机,进一步理解自动机理论。掌握文法转换成自动机的技术及有穷自动机实现的方法。确定词法分析器的输出形式及标识符与关键字的区分方法。加深对课堂教学的理解;提高词法分析方法的实践能力。通过本实验,应达到以下目标: 1、掌握从源程序文件中读取有效字符的方法和产生源程序的内部表示文件的方法。 2、掌握词法分析的实现方法。 3、上机调试编出的词法分析程序。 二、实验过程 以编写PASCAL子集的词法分析程序为例 1.理论部分 (1)主程序设计考虑 主程序的说明部分为各种表格和变量安排空间。 数组 k为关键字表,每个数组元素存放一个关键字。采用定长的方式,较短的关键字 后面补空格。 P数组存放分界符。为了简单起见,分界符、算术运算符和关系运算符都放在 p表中 (编程时,还应建立算术运算符表和关系运算符表,并且各有类号),合并成一类。 id和ci数组分别存放标识符和常数。 instring数组为输入源程序的单词缓存。 outtoken记录为输出内部表示缓存。 还有一些为造表填表设置的变量。 主程序开始后,先以人工方式输入关键字,造 k表;再输入分界符等造p表。 主程序的工作部分设计成便于调试的循环结构。每个循环处理一个单词;接收键盘上 送来的一个单词;调用词法分析过程;输出每个单词的内部码。 ⑵词法分析过程考虑 将词法分析程序设计成独立一遍扫描源程序的结构。其流程图见图 -1。 图1-1 该过程取名为 lexical,它根据输入单词的第一个字符(有时还需读第二个字符),判断单词类,产生类号:以字符 k表示关键字;i表示标识符;c表示常数;p表示分界符;s表示运算符(编程时类号分别为 1,2,3,4,5)。 对于标识符和常数,需分别与标识符表和常数表中已登记的元素相比较,如表中已有 该元素,则记录其在表中的位置,如未出现过,将标识符按顺序填入数组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为分界符表;表1-3为算术运算符的i值;表1-4为关系运算符的i值。 关键字表 指针l 关键字 0 BEGIN 1 DO 2 ELSE 3 EN 4 IF 5 THEN 6 VAR 7 WHILE 表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语言子集中出现其它单词情况进行自行修改以上表格。 最后编写程序进行词法分析,判断目标在哪个表中并进行显示。 实验结果 1.测试数据 数据共分为3组,分别如下: 第一组数据 var i,j,k:integer; begin i:=5; j:=6; k:=i+j; write(k=,k); End. 第二组数据 var i,sum:integer; begin sum:=0; for i:=1 to 10 do begin sum:=sum+i; end; writeln(sum=,sum); End. 第三组数据 var wei

文档评论(0)

2266670 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档