2016级《编译原理课程设计》总结报告
2016级《编译原理课程设计》总结报告(组)
_2019_年_5_月_25_日
姓名 性别 男 男 男 班级 04 04 04 学号 所占比例 个人成绩 % % % 任务分工:(请用小四号宋体填写) 编译系统的总体分析与设计- 具体功能的设计与实现- 对应的测试与验证过程- 系统界面的设计与美工- 成绩评定: 词法分析 自顶向下语法分析 自底向上语法分析 教师签章 语义分析 中间代码生成 目标代码生成 团队成绩 备注 填写说明: 1、请将首页红色部分信息填全,其中:班级为2位数字,保留首位的0;学号为8位数字,软件学院以54开头;所占比例为百分数,精确到个位数,且所有人的所占比例之和为100%;不足3人的分组请保留后面的多余空行,请勿修改该表的结构。 2、请根据实际情况填写任务分工部分,主要任务包括:编译系统的总体分析与设计,4个具体功能的设计与实现,对应的测试与验证过程(报告正文需要列出若干组具体测试样例与对应结果),系统界面的设计与美工,以及辅助工具、视图和文件等。 3、成绩评定部分由指导教师填写,请勿填写和修改。 1
2016级《编译原理课程设计》总结报告
报告正文(请用小四号宋体填写,自行组织章节和段落) 目录 第一部分 实验成果统计表 …………………………………………………………1 第二部分 实验简介 …………………………………………………………………2 第三部分 词法分析 …………………………………………………………………3 第四部分 语法分析 …………………………………………………………………6 4.1 LL(1)语法分析 ……………………………………………………………7 4.2 LR语法分析 ……………………………………………………………10 第五部分 程序测试…………………………………………………………………22 第一部分 实验成果统计表 见首页 第二部分 实验简介 实验目的 分组(每组最多3人)完成对SNL语言的以下两个程序:词法分析程序,语法分析程序(方法不限)。察并锻炼学生的团队协作能力,代码编写能力,加深同学对编译原理中SNL编译系统的理解,帮助同学理解整个编译原理的机制 实验内容 本实验中实现了SNL编译系统中的词法分析、语法分析。其中语法分析包括LL(1)分析方法和LR分析方法 词法分析,以源程序为输入,生成单词的内部表示TOKEN序列。 语法分析,以TOKEN序列为输入进行语法分析,并生成整个源程序的语法分析树。在SNL编译程序中,采用了两种语法分析方法实现:LL(1)和LR,前者为自顶向下的,后者为自底向上的。两种语法分析的结果是一样的。 实验步骤 编译系统的总体分析(算法分析,数据结构设计,优化)→代码实现,分工进行词法分析,语法分析部分→代码测试→结果反馈,修正→系统界面优化设计
2
2016级《编译原理课程设计》总结报告
第三部分 词法分析 源程序一般表现为字符串(机器语言称其为ASCII码)序列的形式,而编译程序的翻译工作应该在单词一级上进行,这与自然语言的翻译理解过程是类似的。因此要进行编译工作,首先要把源程序的字符序列翻译成单词序列。 词法分析是编译过程的第一阶段。它的任务就是对输入的字符串形式的源程序按顺序进行扫描,根据源程序的词法规则识别具有独立意义的单词(符号),并输出与其等价的TOKEN序列。TOKEN是单词(符号)的内部表示。完成词法分析任务的程序称为词法分析程序,通常也称为词法分析器或扫描器(scanner)。 TOKEN是单词在编译程序处理过程中的一种内部表示,也是词法分析程序对程序中各类单词进行处理之后的输出形式。对于一种语言而言,如何对它的单词进行分类,每一类单词的TOKEN数据结构的形式如何,都没有固定的模式,可以随编译程序的不同而不同。通常TOKEN的结构可以分成两部分,单词的语法信息和语义信息。其中语法信息记录的是这个单词的种类,语义信息则记录着这个单词的具体信息。这样,就能为以后的语法分析和语义分析处理单词做好准备。 SNL语法分析对每类单词的分析结果的TOKEN结构为三元组(词法信息、语义信息以及该单词在源程序中的行号)。 实现词法分析器的注意事项: 1.保留字和标识符名字的区分 2.复合单词的处理 3.向前搜索及回退 4.数字的转换 5.输入时边界的处理 6.注释的处理 词法分析主要的类有DoToken、Data、Rule、Token DoToken是最主要的类,它包括identifier标识符列表、INTC常量列表、isIdentifier()标识符自动机、isINTC()数字常量自动机。 Data类包括tokenShow显示token用StringBuffer、tokenShow2测试token用StringBuffer、token token列表、separator 分隔符列表等、以及LL(1)分析表,终极符,非终极符等。 Rule表示SNL的语法规则。 doToken()函数是最主要的函数,它每次调用词法分析方法时要先重新初始化各列表和缓冲字符串,然后从源程序中一个字符一个字符地进行读取,并逐个分离出单词,然后构造它们的机内表示Token。如果该字符不是分隔符则直接追加到sb中,如果该字符是分隔符,则处理分离出的单词。如果是数字常量,则对数字常量进行处理,如果数字常量列表INTC中没有该数字常量则添加。若程序结束时分离出的单词长度不为零,则处理为相应的Token(尽管词法分析已失败,因为程序未能成功结束),并重新初始化用以分离单词的缓冲字符串。当整个源程序都分析完成的时候,将TOKEN链表中各个TOKEN存入文件Tokenlist.txt中,将来输出显示TOKEN时再从Tokenlist.txt中读取。 isIdentifier()函数被doToken()函数调用,如果分隔出的字符串是标识符则在token和tokenShow都要追加。 isINTC()函数被doToken()函数调用,对数字常量列表进行判断,如果数字常量列表中没有该数字常量则添加。 Token()函数中,i表示类型,1为分隔符,2为保留字,3为标识符,4为数字
3
吉林大学《编译原理课程设计》满分实验报告
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)