
2022年编译实验讲义.pdf
14页个人资料整理仅限学习使用《编译原理》课程设计讲义黑龙江大学软件学院精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,共 14 页个人资料整理仅限学习使用《编译原理》课程设计讲义“编译原理”课程是计算机专业中一门重要的专业理论课,是一门理论性和实践性都很强的课程为配合《编译原理》课程的教案,培养学生的实际工作能力,加深对课堂教案内容的理解,通过设计一个小型编译器,更深刻地领会其基本概念、基本工作原理和实现方法,从而具有初步开发系统软件和应用软件的实际能力,特开设此课程设计二、课程设计的题目用高级程序设计语言实现《小型编译器的设计与实现》三、课程设计的主要内容通过小型编译器的设计与实现,使学生系统地掌握编译程序的总体结构以及词法分析程序、语法分析程序、语义分析程序、代码生成程序;掌握结构化设计方法;了解大型软件的设计技术四、课程设计的具体内容和要求1 掌握 PL/02 掌握形式语言与自动机的概念,能构造识别相应符号串的自动机3 掌握编译程序的词法分析程序的构造,能改编PL/O 编译程序的总控程序和词法分析程序4 掌握编译程序中语法分析程序的构造,能改编PL/O 编译程序总控程序和语法分析程序。
5 掌握LL(1> 、 LR、算符优先等语法分析技术,构造相应的语法分析程67 掌握语法制导生成四元式的算法,并构造将表达式翻译成四元式程序8 掌握编译程序的代码生成程序,并改编PL/0的总控控制和代码生成程序精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 2 页,共 14 页个人资料整理仅限学习使用本课程在词法分析阶段、语法分析阶段、语义分析及代码生成阶段均安排了上机实践的内容,按以下的基本实践内容的要求改编总控程序和相学生在对PL/ O 语言某一扫描的分析程序或主程序进行修改或护充时,必须保存完整的源程序正本,只需在相应源文件副本上进行修改然后再重新对修改的程序进行编译,得到新的源文件和新的可执行文件,并用来编译用户编制的含有增加或修改成分的新源程序实验一用 PL/O精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 3 页,共 14 页个人资料整理仅限学习使用 ( 一>实验目的:1TURBO PASCAL2PASCAL3PL/O( 二>实验内容与步骤1PL/02PL/O * * * * * * * * * * * * * * * * * * * * * * * * * 3PL/O语言编写求3~1004 将一正数倒置。
5 对任意给定的整数,列出其二进制、八进制、十六进制表示形式67EBNF 描述 PL/O语言的程序结构及构成规则注:实验二 ( 一>实验目的:PL/0 语言程序<自行定义的源语言)汇编语言程序<你所编译的结果——目标程序)编译器精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 4 页,共 14 页个人资料整理仅限学习使用1234( 二>12高级语言编写程序:该程序能接受所有的常数( 整数和定点小数>3PL/0 的所有保留字4 用高级语言编写程序:该程序能接受PL/0 的所有界符、运算符 三>有关说明:1 C2实验三 ( 一>精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 5 页,共 14 页个人资料整理仅限学习使用1PL/O2PL/O3PL/O4 ( 二>1可将所有标识符归为一类;将常数归为另一类:保留字、界符、运算符符则可采取一词一类2可事先建立一保留字表,以备识别保留字时进行查询变量名表及常数表则在词法分3所输出的每一单词,均按形如(CLASS, VALUE> 的二元式编码。
对于变量标识符和常数, CLASS字段为相应的类别码,VALUE字段是该标识符、常数在其符号表中登记项的序号( 要求在变量名表登记项中存放该标识符的字符串,其最大长度为四个字符;常数表登记项中则存放该常数( 整数 >的二进制形式>对于保留字、界符和运算符,由于采用一词一类的编码方式,所以仅需在二元式的CLASS字段上放置相应的单词的类别码,VALUE字段则为“空” (或:为便于查看由词法分析程序输出的单词串也可以在CLASS字段上放置单词符号串本身 >4( 三>有关说明:1PL/O2PL/ O的编译程序中的词法分析程序,使之能识别含repeat 语句的程序实验四表达式 ( 一>精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 6 页,共 14 页个人资料整理仅限学习使用1PL/O2分别掌握LL(1> 、算符优先、LR( 二>实验内容及步骤算符优先矩阵( 或 LL(1> 矩阵或SLR(1>矩阵 >,并编制语法分析程序例如:给定文法G E→T E1 E1→ +TE1/ε T→FT1 T1→ *FT1/ε F→i /(E>(1>先构造其SELECT 集合,判定其是否为LL(1> 文法;(2>是则构造其LL<1)分析表;(3>给出句子i+i*i#及
实验五语法分析程序的构造精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 7 页,共 14 页个人资料整理仅限学习使用( 一>1 掌握 LL(1> 、算符优先、LR等语法分析方法的构造2 按要求改编总控程序及语法分析程序 二>实验内容及步骤1 选择一种你感兴趣的语法分析方法( 算符优先、 LL(1> 、SLR<1> )作为编制语法分析程序的依据 .2PL/O 语言,对PL/O 语言的功能进行下列扩充,改编后并上机调试通过1>增加 for(2>增加 do-while语句(3> 〈条件语句〉∶∶=IF 〈条件〉 THEN 〈语句〉 ELSE 〈语句〉〖 ZK>(4>VAR 〈数组名〉 ( 〈下界〉∶ <上界 >>〈下界〉和〈上界〉可用常量标识符3PL/O45和条件每人1~5 中选择某几项或者全部精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 8 页,共 14 页个人资料整理仅限学习使用实验六 中间语言翻译器的构造 ( 一>实验目的123 ( 二>实验步骤与内容1PUSH( α,Q>表示 Q进α栈; POP( σ ,B>表示从 σ栈出栈; NEXT表示读下一符号。
输入流σ[s-1]名字 Q ( ω2 > # ω1 PUSH(α ,Q> NEXT PUSH( σ,△> NEXT 若 ω1< ω2,则PUSH(σ ,ω2> NEXT若 ω1≥ ω2,则POP( σ ,B),PUSH( α,B> POP(σ,B> PUSH( α, B> POP(σ , B>PUSH( α,B> △PUSH( α,Q> NEXT PUSH( σ,△> NEXT PUSH( σ,ω2> NEXT POP(σ , B>NEXT STOP 2精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 9 页,共 14 页个人资料整理仅限学习使用3可以是 +,- ,*实验七( 一>1PL/O2 ( 二>实验步骤及内容:1PL/ O按照实验四中步骤3 的四个方面增加PL( 注:四项扩充可任选一项或某几项功能>2PL/O3调试通过增改后的PL/O编译程序精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 10 页,共 14 页个人资料整理仅限学习使用实验八综合设计 < 一)实验目的: 1 系统地掌握编译程序的总体结构。
2 掌握词法分析、语法分析、语义分析、目标生成的实质含义 3 掌握结构化设计方法 4 了解大型软件的设计技术 < 二)实验内容与步骤:1 采用软件工程的结构化设计方法,将第三个实验到第六个实验利用结构化设计方法综合为一个完整的小型编译器,以达到系统掌握开发软件系统的方法和技术的目的2 设计该系统的总体菜单3 通过总体菜单选择某一功能进入子菜单4 通过某一功能子菜单,进入相应各个子系统,完成具体的功能5 通过辅助工具,进一步丰富和完善上述程序窗口、菜单的界面设计精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 11 页,共 14 页个人资料整理仅限学习使用 1、本课程设计共安排了八个设计题目,每个同学在实验后要按照软件 工 程 的 思 想 写 出 设 计 文 档 , 并 在 文 档的 最 后 给 出 对 设 计 的 收获 、 体会、希望和建议,以利于不断改进教案不合格者需要重修 2 、成绩评定: 每个实验题目需在规定时间内完成,成绩达到及格以上方可进行下一个实验题目每个实验题目有各自的分值,总计100 分完成全部设计题目3序号实验工程内容提要时间安排分数有关说明实验一PL/O源程序结构及构成规则用高级语言编写程序建立和 访 问 正 文 文 件 , 并 用PL/O语言编写程序,扩充规则。
第四周5分要 求 : 任 选 ,完 成 任 选 题 目的学生可加分实验二构造识别符号串的自动机用语言实现,分别编写识别各类单词的程序第五周10分要求:必做实验三词法分析程序的构造以PL/O 编 译 程 序 为 样本,改编其总控程序和词法分析程序,使其能对扩充后的PL/O 语言进行词法分析第六周| 第七周15分要求:必做精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 12 页,共 14 页个人资料整理仅限学习使用实验四表达式的语法分析程序的构造用高级语言编写程序,使其 能 对 算 术 表 达 式 进 行LL<1)、算符优先、LR的语法分析第八周 | 第九周15分要求:必做实验五语法分析程序的构造选择一种语法分析方法对实验三所生成的单词序列进行语法分析第十周 | 第十四周15 分要求:必做实验六中间语言翻译器的构造用 C语言编写程序,使其能将任意表达式翻译成逆波兰式,并用语法制导的方法生成表达式的四元式序列第十五周 | 第十六周15分要求:必做实验七目标代码生成以 PL/O编译程序为样本,改编总控制程序及代码生成程序第十七周10分要求:必做。
实验八综合设计通过结构化设计方法将上述各种程序综合为一个完整的软件系统,以窗口、菜单做界面进入各个子系统 , 最终实现《编译器原型系统的设计》第十八周15分要 求 : 实 验 完成 后 , 经 测 试通 过 者 , 综 合前 几 个 实 验 成绩 和 平 时 的 出勤 分 数 , 给 出整 个 实 验 的 成绩精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 13 页,共 14 页个人资料整理仅限学习使用精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 14 页,共 14 页。
