编译原理compiler实验指导书.docx
- 文档编号:11329417
- 上传时间:2023-02-27
- 格式:DOCX
- 页数:19
- 大小:21.82KB
编译原理compiler实验指导书.docx
《编译原理compiler实验指导书.docx》由会员分享,可在线阅读,更多相关《编译原理compiler实验指导书.docx(19页珍藏版)》请在冰豆网上搜索。
编译原理compiler实验指导书
编译原理
实验指导书
课程名称:
编译原理
英文名称:
CompilerPrinciple
课程性质:
必修
编写人:
编译原理课程组
2013年9月1日
计算机学院
1.
阅读说明
±基础实验☺、选做实验☻、实验中的附加内容★
±未加标注的实验为参考实验
2.实验要求
✧从以下方案中选一
±方案A(成绩上限:
120%)
-完成1个基础实验☺:
90%
-完成选做实验☻或实验中的附加内容★:
30%
±方案B(成绩上限:
150%)
-完成综合实验3.1:
150%
3.成绩评定
✧成绩评定依据
±原创性、工作量(自己编写的代码部分才能得分,参考的部分不得分)
±代码质量、丰富的测试用例、功能和实现上的独立思考与创新
±实验验收顺序、主动性
✧评分标准
±源码、验收、答辩(90%)
±实验报告、作品及文档提交(10%)
4.验收流程
✧必须携带打印版实验报告进行验收,验收顺序依据实验报告提交的顺序
✧验收分“申优验收”和“抽查”两种形式,参加“申优验收”才能获得B(百分制85%)以上的成绩。
✧必须当面验收的实验-选做内容、选做实验、综合实验
5.设计文档要求
✧设计文档参照模板书写。
✧所有实验必须提交设计文档的打印版本(A4)
6.作品提交要求
✧参加“申优验收”的同学需提交作品的电子文档及源码,
否则,只需提交打印版实验报告。
✧将作品打包成.rar文件发送至指定电子邮箱
邮箱地址:
ytuCompiler@
✧请大家参考以下目录命名与结构提交实验所有文档及源码
COMPILER_班级_学号_姓名_本次实验名称(根目录)
├bin存放可执行程序
├config存放各种配置文件
├lib存放类库文件
├doc存放设计文档及readme.txt
├src存放源程序及项目工程文件
├test存放测试程序
├references存放参考文档、代码、其他资源
根目录命名举例:
COMPILER_0813_200825501101_张三_实验1.1
❑若发现程序或文档雷同,按作弊处理
°完全雷同,取消参加期末考试资格,本学期理课程总评成绩为0分。
°部分雷同,扣除相应分数。
❑代码中如果有参考的部分,一定要在设计文档中对原创性进行说明,否则按作弊处理。
I单元实验
实验1.1根据状态转换图手工构造词法分析程序
☺★★★
一、实验目的
1.理解词法分析器的基本功能
2.理解词法规则的描述方法
3.理解状态转换图及其实现
4.能够编写简单的词法分析器
二、实验平台
Windows+VC
三、基本内容
1.通过状态转换图实现对单词的识别。
a)状态转换图由教师指定
b)输入:
符号串
输出:
yes/No–该符号串是否符合状态转换图的定义
2.从以下方法中选一实现
a)直接转向法
b)表驱动法
四、附加内容
★★从文件中读入符号串,从中识别出指定的单词。
±能连续识别出多个单词
±尽可能匹配最长串
★词法分析程序被主函数调用,每次调用返回1个单词。
五、设计文档
1.分析直接转向法和表驱动法的优缺点
六、参考资料
1.Tiny编译器
实验1.2用FLEX自动构造词法分析程序
一、实验目的
1.学习使用词法分析程序自动构造工具Flex
2.熟悉LEX源程序语法
3.掌握词法分析程序的自动构造方法
二、实验平台
Windows+Flex
三、基本内容
1.实现以下步骤,掌握Flex的工作过程
i.构造LEX源程序,例如命名为Test.Lex
ii.编译LEX源程序,生成C语言词法分析程序lex.yy.c,步骤如下:
在DOS命令提示符下执行编译flexTest.Lex得到目标文件lex.yy.c
iii.在VC中编译lex.yy.c,产生可执行程序lex.yy.exe
iv.运行生成的可执行文件lex.yy或lex.yy 2.测试目录SRC_FLEX中的范例程序,了解其功能及实现。 四、附加内容 五、设计文档 六、参考资料 1.LEX范例程序: SRC_FLEX 实验1.3在Windows平台下使用Flex和Bison ★★★ 一、实验目的 1.学习使用语法分析程序自动构造工具Bison 2.熟悉YACC源程序语法 3.掌握语法分析程序的自动构造方法 二、实验平台 Windows+Flex+Bison 三、基本内容 1.实现以下步骤,掌握Flex和Bison的工作过程 a)在DOS命令提示符下依次执行以下两行命令 flexcalc.lex bison-ocalc.ccalc.y b)编译运行calc.c 2.测试目录SRC_BISON中的范例程序,了解其功能及实现。 3.参考范例程序,用Flex和Bison实现一个功能更为强大的计算器,包含以下运算: a)加、减、乘、除运算 b)乘方、开方运算 c)位运算 –与&、或|、非~... d)阶乘运算! 四、附加内容 1.进一步完善计算器功能,实现对以下语法结构的分析 ★12+23*34+sin(45)/cos(56)-67 2.用Flex和Bison实现以下翻译方案。 ★输入中缀表达式,输出后缀表达式 例如: 输入3+4*5 输出345*+ G: EE+T{print‘+’} ET TT*F{print‘*’} TF F(E) Fi{print‘i’} ★输入二进制数,输出十进制数 G: NS1.S{N.v=S1.v+S.v*2-S.L} SS1B{S.v=S1.v*2+B.v,S.L=S1.L+1} SB{S.v=B.v,S.L=1} B0{B.v=0} B1{B.v=1} ★读入输入符号串,若输入符号串合法,则输出括号()的对数 SSprint(S.num) S(L)S.num: =L.num+1 SaS.num: =0 LL1,SL.num: =L1.num+S.num LSL.num: =S.num 五、设计文档 六、参考资料 1.BISON范例程序: SRC-BISON 实验1.4递归下降分析 ☺★★★ 一、实验目的 1.加深对递归下降分析过程的理解。 二、实验平台 Windows+VC 三、基本内容 1.运行参考程序,了解递归下降分析原理。 2.针对一个新文法构造递归下降分析程序。 a)对该文法进行LL (1)判别,若不是LL (1)文法,则进行等价变换。 b)构造预测分析表。 c)针对文法构造递归下降分析程序。 四、附加内容 ★从文件中读入若干个符号串,依次输出语法分析的结果 ★★用可视化工具输出语法树 五、设计文档 1.LL (1)判别过程和预测分析表可以手写,附在实验报告后面。 六、参考资料 1.递归下降分析程序: “递归下降.c” 此程序对应的文法如下: G: (1)E→TG (2)G→+TG|-TG (3)G→ε (4)T→FS (5)S→*FS|/FS (6)S→ε (7)F→(E) (8)F→i 实验1.5预测分析 ☺★★★ 一、实验目的 1.深入理解LL (1)文法的预测分析过程。 二、实验平台 Windows+VC 三、实验内容 1.运行参考程序,了解预测分析原理。 2.针对一个新文法构造预测分析程序。 a)对该文法进行LL (1)判别,若不是LL (1)文法,则进行等价变换。 b)构造预测分析表。 c)针对文法构造预测分析程序。 四、附加内容 ★从文件中读入若干个符号串,依次输出语法分析的结果。 ★★用可视化工具输出语法树。 五、设计文档 1.LL (1)判别过程和预测分析表可以手写,附在实验报告后面。 六、参考资料 1.LL.c 实验1.6LR分析 ☺★★★ 一、实验目的 1.深入理解LR分析过程。 二、实验平台 Windows+VC 三、实验内容 1.运行参考程序,了解LR分析原理。 2.针对一个新文法构造LR分析程序。 a)构造LR分析表。 b)针对文法构造LR分析程序。 四、附加内容 ★从文件中读入若干个符号串,依次输出语法分析的结果。 ★★用可视化工具输出语法树。 五、设计文档 1.LR分析表的构造过程可以手写,附在实验报告后面。 六、参考资料 1.LR.c II扩展实验 实验2.1为SLEX修正bug ☻ 一、实验目的 1.通过修正SLex的bug深入了解词法分析程序的工作原理。 二、实验平台 Windows+Slex 三、基本内容 1.修正Slex的bug −用Slex编译一个lex源程序,得到LEXYY.C −编译LEXYY.C得到LEXYY.EXE −运行LEXYY.EXE,以一个文件作为输入,会发现无法正常退出 四、附加内容 五、设计文档 1.详细写出bug修正方案。 六、参考资料 实验2.2理解AnsiC的文法规则 ☻ 一、实验目的 1.进一步理解Lex和Yacc的工作原理 2.理解AnsiC的文法规则 二、实验平台 Lex+Yacc 三、基本内容 1.阅读AnsiC的Lex和Yacc源程序,理解词法和语法规则 2.对AnsiC的文法进行改进: (1)添加'++'和'––'操作符 提示: 在词法分析程序段添加正规式,同时在Yacc程序的前缀表达式和后缀表达式中添加相应的文法规则,也可以只在Yacc程序段中添加文法规则。 (2)限定标识符长度为32个字符,超过32个字符部分无效,并给出警告信息。 提示: 在词法分析程序段中添加计算标识符长度的函数,并根据计算结果做出相应处理。 、 四、附加内容 五、设计文档 六、参考资料 1.参考源码: ANSICgrammar(Lex).htm ANSICgrammar(Yacc).htm 实验2.3搭建LLVM环境 ☻ 一、实验目的 1.了解LLVM的工作原理及环境搭建 二、实验平台 Ubuntu+Flex+Bison+LLVM 三、基本内容 1.搭建LLVM环境 1)下载LLVM安装包 2)安装Ubuntu 3)安装g++ $sudoapt-getinstallg++ 4)安装flex $sudoapt-getinstallflex 5)安装bison $sudoapt-getinstallbison 6)安装clang $sudoapt-getinstallclang 7)安装llvm-3.0 $cdllvm-3.0.src $sudo./configure $sudomake $sudomakeinstall 8)安装llvm-gcc-4.5 $sudoapt-getinstallllvm-gcc-4.5 2.测试 1)调用clang生成可执行文件hello $clanghello.c-ohello–v 使用-v选项能看到,clang负责生成了汇编文件.s,然后/usr/bin/gcc负责将汇编文件转为.o文件,进而生成hello可执行文件。 2)运行可执行文件hello $./hello 3)调用clang生成LLVM中间表示文件.bc (LLVMbitcode文件) $clanghello.c-c-ohello.bc-emit-llvm-v 4)调用LLVM虚拟机解释执行 $llihello.bc 5)转换为可读模式的LLVM中间表示,反汇编 llvm-dis 6)将LLVM中间表示转换为本地的汇编语言文件 $llchello.bc-ohello.s 7)调用GCC将汇编文件直接转换为本地可执行文件 $gcchello.s-ohello.native 8)执行 $./hello.native 9)调用llvm-g++的编译前端为test.cc生成相应的LLVMbitcode文件 $llvm-g++test.cc-emit-llvm-c-otest.bc (Potentialincompatiblepluginversion.GCC: 4.5.3.Expected: 4.5.4 Defines'dragonegg_disable_version_check'asenvvariabletoremovethiswarning Pleasenotethatunexpectederrorsmightoccur. ) 10)在调用llvm-g++的过程中添加上选项—verbose, 以确认llvm-g++前端在编译过程中使用的是正确的头文件 $llvm-g++--verbosetest.cc-emit-llvm-c-otest.bc 11)加上-S选项,生成LLVM的汇编格式文件 $llvm-g++-Stest.cc--emit-llvm 四、附加内容 五、设计文档 六、参考资料 1.参考网站: www.llvm.org 2.参考源码: hello.c,test.cc 实验2.4使用LLVM创建一个编译器 ☻★★ 一、实验目的 1.了解一个完整编译器的创建过程 二、实验平台 Ubuntu+Flex+Bison+LLVM 三、基本内容 1.对Toy编译器进行调试。 四、附加内容 ★★对Toy编译器进行功能扩展。 五、设计文档 六、参考资料 1.参考源码: Toy编译器(LLVM3.0) III综合实验 实验3.1对选定的语言实现编译器前端 ☺☺☺☺☺☺★★ 一、实验目的 1.掌握编译器前端的实现过程 二、实验平台 任选 三、实验内容 1.选定附录中的一个文法,分析其描述的语言,确定语言中的终结符和非终结符。 ±若选了标注★的语言,则自起评点额外获得相应★ 2.分析文法的二义性 3.编写源程序 ✧编写两个以上语法正确的源程序,要求用到该语言的所有语法结构。 如果有可能,你编写的源程序最好有实际意义,比如求平均值、阶乘、斐波那契序列等 ✧编写两个以上有语法错误的源程序,既包含词法错误,也包含语法错误 ✧以上源程序可作为测试用例 4.构造词法分析程序 ✧若文法中包含词法定义,将词法定义分离出来;否则自己补全词法定义。 将词法定义写成正则表达式的形式。 ✧可以采用手工构造方式,也可以选择自动生成方式 5.构造语法分析程序 ✧可以采用手工构造方式,也可以选择自动生成方式 ✧注意: 若采用递归下降分析法,当文法不满足LL (1)条件时,需等价变换为LL (1)文法 ✧对一个存在词法错误或语法错误的源程序,需至少指出一处语法错误的原因及其位置(错误产生的位置定位允许有偏差) ✧可尝试在错误中恢复并继续进行语法分析 6.为其添加相应的语义动作,生成中间代码。 ✧中间代码可以采用三地址代码或抽象语法树 四、附加内容 五、设计文档 六、参考资料 1.参考源码: PL0编译程序 附录 附录A T0语言 ProgramBEGINStmt-ListEND Stmt-ListStmt-ListStmt |Stmt StmtAssign-stmt Assign-stmtID=Expr; ExprExprAdd-OpTerm |Term TermTermMultiple-OpFactor |Factor Factor(Expr) |ID |NUM Add_Op+|- Multiple_Op*|/ T1语言★ ProgramBEGINStmt-ListEND Stmt-ListStmt-ListStmt |Stmt StmtAssign-stmt |Read-stmt |Write-stmt Assign-stmtID=Expr; Read-stmtREAD(IdList); Write-stmtWRITE(ExprList); Id-ListId-List,ID |ID Expr-ListExpr-List,Expr |Expr ExprExprAdd-OpTerm |Term TermTermMultiple-OpFactor |Factor Factor(Expr) |ID |NUM Add_Op+|- Multiple_Op*|/ T2语言★★ ProgramBEGINStmt-ListEND Stmt-ListStmt-ListStmt |Stmt StmtAssign-stmt |Read-stmt |Write-stmt |If-stmt |Repeat-stmt Assign-stmtID=Expr; Read-stmtREAD(IdList); Write-stmtWRITE(ExprList); If-stmtIFExprTHENStmt-ListEND; |IFExprTHENStmt-ListELSEStmt-ListEND; Repeat-stmtREPEATStmt-ListUNTILExpr; Id-ListId-List,ID |ID Expr-ListExpr-List,Expr |Expr ExprExprAdd-OpTerm |Term TermTermMultiple-OpFactor |Factor Factor(Expr) |ID |NUM Add_Op+|- Multiple_Op*|/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 compiler 实验 指导书