编译原理课程设计 2017年4月
实验内容 设计并实现SNL程序设计语言的编译程序; 两个程序 词法分析模块 语法分析模块(二选一) 递归下降方法 LL(1)方法
实验时间 第 9-12 周,周一8:00-11:00 4.24 、 5.8 、 5.15 计楼 B212
实验模块之间的关系 语义分析模块 词法分析模块 语法分析模块 (递归下降法) (LL(1)方法) SNL源程序 Token序列 语法树
实验目的 通过对SNL编译程序的学习和动手实践,使学生可以更加深入、全面地掌握编译程序的工作原理和实现技术; 培养大型软件的程序设计方法。
SNL语言简介 SNL(Small Nested Language)是自行定义的教学模型语言,它是一种类似Pascal的”高级”程序设计语言 数据类型:整型、字符型,数组、记录 过程允许嵌套定义,允许递归调用
SNL的程序结构 程序头 声明部分 程序体部分 类型声明部分 变量声明部分 过程声明部分 program pp Type t=integer; var t v1; char v2; procedure f(); begin v1 :=2 end f(); write(v1) end.
SNL的语法 SNL的上下文无关文法(P9-P12页)
第一个程序: SNL的词法分析程序 输入:SNL源程序 输出:单词的内部表示序列-Token序列 程序设计步骤 确定单词分类;P35 单词的正则表达式定义(词法定义);P7–P8 构造DFA ; P39 根据DFA生成单词识别函数 对于给定的当前状态和当前字符,决定下一个状态; 如果是结束状态,得到单词的类别和信息; 否则,设置为当前状态;
词法分析程序涉及的一些问题 Token表示定义 单词分类 每类单词的构成 自动机的实现(状态图方法、转换表方法) 一些特殊情形的处理:注释、括号匹配、向前扫描等
第二个程序—语法分析方法一: SNL的递归下降分析程序 例:S → A u B A → a a B → b b 则各个VN的递归子程序结构如下: S( ) begin A(); match(u); B() end A( ) begin match(a); match(a) end B( ) begin match(b); match(b) end 输入:Token序列 输出:语法错误检查信息和语法树 思想 对文法的每一个VN都编写一个分析程序,当根据文法和当前输入符号预测到要用某个VN去匹配输入串时,就调用该VN的分析程序。 当形如:A1|2|…|n时需要通过predict集确定子程序的调用。P61-P64
递归下降分析模块 语法树的输出 层次文本输出 图形输出 ProK PheadK p TypeK DecK IntegerK t1 VarK DecK IntegerK v1 v2 ProcDecK q DecK value param: IntegerK i DecK IntegerK a StmLk StmtK Assign ExpK a IdV ExpK i IdV StmtK Write StmtK Read v1 StmtK If ExpK Op < ExpK v1 IdV ExpK Const 10 ExpK Op + ExpK Const 10 ExpK Op - StmtK Call ExpK q IdV 语法树的输出 层次文本输出 图形输出
语法分析方法二 SNL的LL(1)分析程序 输入:Token序列 输出:语法错误检查信息和语法树
实验报告 本次实验采取三人组成开发小组的形式集体讨论合作完成。要求小组人员分工明确,每个人都要参与,了解整个过程。 实验报告要求 实验题目:2014级《编译原理课程设计》总结报告 实验时间、指导教师、小组成员学号姓名及分工 实验目的、实验内容,两个程序的设计思想、实验步骤、数据结构及算法设计、实验结果、实验结论。 正文使用小四字号,宋体。
成绩评定 综合实验的签到情况,实验报告完成情况和老师对程序的检查结果综合评定。 检查程序时要求组内成员必须全部到场 每组成员因为表现不同,成绩会有不同!