ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:21.82KB ,
资源ID:11329417      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11329417.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(编译原理compiler实验指导书.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

编译原理compiler实验指导书.docx

1、编译原理compiler实验指导书编译原理实验指导书课程名称 : 编译原理英文名称 : Compiler Principle课程性质 : 必修编写人 : 编译原理课程组2013年9月1日计算机学院1. 阅读说明 基础实验、选做实验、实验中的附加内容 未加标注的实验为参考实验2. 实验要求 从以下方案中选一 方案A (成绩上限:120%)- 完成1个基础实验: 90%- 完成选做实验或实验中的附加内容: 30% 方案B (成绩上限:150%)- 完成综合实验3.1: 150% 3. 成绩评定 成绩评定依据 原创性、工作量(自己编写的代码部分才能得分,参考的部分不得分) 代码质量、丰富的测试用例、

2、功能和实现上的独立思考与创新 实验验收顺序、主动性 评分标准 源码、验收、答辩 (90%) 实验报告、作品及文档提交 (10%)4. 验收流程 必须携带打印版实验报告进行验收,验收顺序依据实验报告提交的顺序 验收分“申优验收”和“抽查”两种形式,参加“申优验收”才能获得B(百分制85%)以上的成绩。 必须当面验收的实验 - 选做内容、选做实验、综合实验5. 设计文档要求 设计文档参照模板书写。 所有实验必须提交设计文档的打印版本(A4)6. 作品提交要求 参加“申优验收”的同学需提交作品的电子文档及源码,否则,只需提交打印版实验报告。 将作品打包成 .rar文件发送至指定电子邮箱邮箱地址: y

3、tuCompiler 请大家参考以下目录命名与结构提交实验所有文档及源码COMPILER_班级_学号_姓名_本次实验名称 (根目录) bin 存放可执行程序 config 存放各种配置文件 lib 存放类库文件 doc 存放设计文档及readme.txt src 存放源程序及项目工程文件 test 存放测试程序 references 存放参考文档、代码、其他资源根目录命名举例: COMPILER_0813_200825501101_张三_实验1.1 若发现程序或文档雷同,按作弊处理 完全雷同,取消参加期末考试资格,本学期理课程总评成绩为0分。 部分雷同,扣除相应分数。 代码中如果有参考的部分,

4、一定要在设计文档中对原创性进行说明,否则按作弊处理。I 单元实验实验1.1 根据状态转换图手工构造词法分析程序一、实验目的1. 理解词法分析器的基本功能2. 理解词法规则的描述方法3. 理解状态转换图及其实现4. 能够编写简单的词法分析器二、实验平台Windows + VC三、基本内容1. 通过状态转换图实现对单词的识别。a) 状态转换图由教师指定b) 输入: 符号串输出: yes / No 该符号串是否符合状态转换图的定义2. 从以下方法中选一实现a) 直接转向法b) 表驱动法四、附加内容 从文件中读入符号串,从中识别出指定的单词。 能连续识别出多个单词 尽可能匹配最长串 词法分析程序被主函

5、数调用,每次调用返回1个单词。五、设计文档1. 分析直接转向法和表驱动法的优缺点六、参考资料1. Tiny编译器实验1.2用FLEX自动构造词法分析程序一、实验目的1. 学习使用词法分析程序自动构造工具Flex2. 熟悉LEX源程序语法3. 掌握词法分析程序的自动构造方法二、实验平台Windows + Flex三、基本内容1. 实现以下步骤, 掌握Flex的工作过程i. 构造LEX源程序, 例如命名为Test.Lex ii. 编译LEX源程序, 生成C语言词法分析程序lex.yy.c, 步骤如下: 在DOS命令提示符下执行编译 flex Test.Lex 得到目标文件 lex.yy.c iii

6、. 在VC中编译lex.yy.c,产生可执行程序lex.yy.exe iv. 运行生成的可执行文件lex.yy 或 lex.yy InputFile 2. 测试目录SRC_FLEX中的范例程序,了解其功能及实现。四、附加内容五、设计文档六、参考资料1. LEX范例程序:SRC_FLEX实验1.3 在Windows平台下使用Flex和Bison一、实验目的1. 学习使用语法分析程序自动构造工具Bison2. 熟悉YACC源程序语法3. 掌握语法分析程序的自动构造方法二、实验平台Windows + Flex + Bison三、基本内容1. 实现以下步骤, 掌握Flex和Bison的工作过程a) 在

7、DOS 命令提示符下依次执行以下两行命令 flex calc.lexbison -ocalc.c calc.yb) 编译运行 calc.c2. 测试目录SRC_BISON中的范例程序,了解其功能及实现。3. 参考范例程序, 用Flex和Bison实现一个功能更为强大的计算器,包含以下运算:a) 加、减、乘、除运算b) 乘方、开方运算c) 位运算 与 & 、或 |、非 .d) 阶乘运算 ! 四、附加内容1. 进一步完善计算器功能,实现对以下语法结构的分析 12+23*34+sin(45)/cos(56)-672. 用Flex和Bison实现以下翻译方案。 输入中缀表达式, 输出后缀表达式 例如:

8、 输入3+4*5 输出 345*+G: E ET print +E T T T*F print *T FF (E) F i print i 输入二进制数,输出十进制数G: N S1.S N.v=S1.v+S.v*2-S.L S S1B S.v=S1.v*2+B.v, S.L=S1.L+1 S B S.v=B.v, S.L=1 B 0 B.v=0 B 1 B.v=1 读入输入符号串,若输入符号串合法,则输出括号( )的对数S S print (S. num)S ( L ) S. num := L.num + 1S a S. num := 0L L1 , S L. num := L1. num +

9、 S. numL S L. num := S.num 五、设计文档六、参考资料1. BISON范例程序:SRC-BISON实验1.4 递归下降分析一、实验目的1. 加深对递归下降分析过程的理解。二、实验平台Windows + VC三、基本内容1. 运行参考程序,了解递归下降分析原理。2. 针对一个新文法构造递归下降分析程序。a) 对该文法进行LL(1)判别,若不是LL(1)文法,则进行等价变换。b) 构造预测分析表。c) 针对文法构造递归下降分析程序。四、附加内容 从文件中读入若干个符号串, 依次输出语法分析的结果 用可视化工具输出语法树五、设计文档1. LL(1)判别过程和预测分析表可以手写

10、,附在实验报告后面。六、参考资料1. 递归下降分析程序: “ 递归下降.c ”此程序对应的文法如下:G: (1) ETG(2) G+TG|-TG(3) G(4) TFS(5) S*FS|/FS(6) S(7) F(E)(8) Fi实验1.5 预测分析一、实验目的1. 深入理解LL(1)文法的预测分析过程。二、实验平台Windows + VC三、实验内容1. 运行参考程序,了解预测分析原理。2. 针对一个新文法构造预测分析程序。a) 对该文法进行LL(1)判别,若不是LL(1)文法,则进行等价变换。b) 构造预测分析表。c) 针对文法构造预测分析程序。四、附加内容 从文件中读入若干个符号串, 依

11、次输出语法分析的结果。 用可视化工具输出语法树。五、设计文档1. LL(1)判别过程和预测分析表可以手写,附在实验报告后面。六、参考资料1. LL.c实验1.6 LR分析一、实验目的1. 深入理解LR分析过程。二、实验平台Windows + VC三、实验内容1. 运行参考程序,了解LR分析原理。2. 针对一个新文法构造LR分析程序。a) 构造LR分析表。b) 针对文法构造LR分析程序。四、附加内容 从文件中读入若干个符号串, 依次输出语法分析的结果。 用可视化工具输出语法树。五、设计文档1. LR分析表的构造过程可以手写,附在实验报告后面。六、参考资料1. LR.cII 扩展实验实验2.1 为

12、SLEX修正bug 一、实验目的1. 通过修正SLex的bug深入了解词法分析程序的工作原理。 二、实验平台Windows + Slex三、基本内容1. 修正Slex的bug 用Slex编译一个lex源程序,得到LEXYY.C 编译LEXYY.C 得到LEXYY.EXE 运行LEXYY.EXE,以一个文件作为输入,会发现无法正常退出四、附加内容五、设计文档1.详细写出bug修正方案。六、参考资料实验2.2 理解Ansi C的 文法规则一、实验目的1. 进一步理解Lex和Yacc的工作原理2. 理解Ansi C的文法规则二、实验平台Lex + Yacc三、基本内容1. 阅读Ansi C 的Lex

13、和Yacc源程序,理解词法和语法规则2. 对Ansi C 的文法进行改进: (1) 添加 + + 和 操作符提示: 在词法分析程序段添加正规式,同时在Yacc程序的前缀表达式和后缀表达式中添加相应的文法规则,也可以只在Yacc程序段中添加文法规则。 (2) 限定标识符长度为32个字符,超过32个字符部分无效,并给出警告信息。提示: 在词法分析程序段中添加计算标识符长度的函数,并根据计算结果做出相应处理。、四、附加内容五、设计文档六、参考资料1. 参考源码: ANSI C grammar (Lex).htmANSI C grammar (Yacc).htm实验2.3 搭建LLVM环境一、实验目的

14、1. 了解LLVM的工作原理及环境搭建 二、实验平台Ubuntu + Flex + Bison + LLVM三、基本内容1. 搭建LLVM环境1) 下载LLVM安装包2) 安装 Ubuntu3) 安装 g+$ sudo apt-get install g+4) 安装 flex$ sudo apt-get install flex5) 安装 bison$ sudo apt-get install bison6) 安装 clang$ sudo apt-get install clang7) 安装 llvm-3.0$ cd llvm-3.0.src$ sudo ./configure $ sudo

15、make $ sudo make install 8) 安装 llvm-gcc-4.5$ sudo apt-get install llvm-gcc-4.52. 测试1) 调用clang生成可执行文件hello$ clang hello.c -o hello v使用-v选项能看到,clang负责生成了汇编文件.s,然后/usr/bin/gcc负责将汇编文件转为.o文件,进而生成hello可执行文件。2) 运行可执行文件hello$./hello3) 调用clang生成LLVM中间表示文件.bc(LLVM bit code文件)$ clang hello.c -c -o hello.bc -em

16、it-llvm -v4) 调用LLVM虚拟机解释执行$ lli hello.bc5) 转换为可读模式的LLVM中间表示,反汇编llvm-dis hello.bc6) 将LLVM中间表示转换为本地的汇编语言文件 $ llc hello.bc -o hello.s7) 调用GCC将汇编文件直接转换为本地可执行文件$ gcc hello.s -o hello.native8) 执行$./hello.native9) 调用llvm-g+的编译前端为test.cc生成相应的LLVM bit code 文件$ llvm-g+ test.cc -emit-llvm -c -o test.bc (Potent

17、ial incompatible plugin version. GCC: 4.5.3. Expected: 4.5.4Defines dragonegg_disable_version_check as env variable to remove this warningPlease note that unexpected errors might occur.)10) 在调用llvm-g+的过程中添加上选项verbose,以确认llvm-g+前端在编译过程中使用的是正确的头文件$ llvm-g+ -verbose test.cc -emit-llvm -c -o test.bc 11)

18、 加上 -S 选项,生成 LLVM的汇编格式文件$ llvm-g+ -S test.cc -emit-llvm四、附加内容五、设计文档六、参考资料1. 参考网站: www.llvm.org2. 参考源码: hello.c, test.cc实验2.4 使用LLVM创建一个编译器一、实验目的1. 了解一个完整编译器的创建过程 二、实验平台Ubuntu + Flex + Bison + LLVM三、基本内容1. 对Toy编译器进行调试。四、附加内容 对Toy编译器进行功能扩展。五、设计文档六、参考资料1. 参考源码: Toy编译器 (LLVM 3.0)III 综合实验实验3.1 对选定的语言实现编译

19、器前端一、实验目的1. 掌握编译器前端的实现过程二、实验平台任选三、实验内容1. 选定附录中的一个文法,分析其描述的语言,确定语言中的终结符和非终结符。 若选了标注的语言,则自起评点额外获得相应2. 分析文法的二义性3. 编写源程序 编写两个以上语法正确的源程序,要求用到该语言的所有语法结构。如果有可能,你编写的源程序最好有实际意义,比如求平均值、阶乘、斐波那契序列等 编写两个以上有语法错误的源程序,既包含词法错误,也包含语法错误 以上源程序可作为测试用例4. 构造词法分析程序 若文法中包含词法定义,将词法定义分离出来;否则自己补全词法定义。将词法定义写成正则表达式的形式。 可以采用手工构造方

20、式,也可以选择自动生成方式 5. 构造语法分析程序 可以采用手工构造方式,也可以选择自动生成方式 注意:若采用递归下降分析法,当文法不满足LL(1)条件时,需等价变换为LL(1)文法 对一个存在词法错误或语法错误的源程序,需至少指出一处语法错误的原因及其位置(错误产生的位置定位允许有偏差) 可尝试在错误中恢复并继续进行语法分析6. 为其添加相应的语义动作,生成中间代码。 中间代码可以采用三地址代码或抽象语法树四、附加内容五、设计文档六、参考资料1. 参考源码: PL0编译程序附录附录AT0语言Program BEGIN Stmt-List ENDStmt-List Stmt-List Stmt

21、| StmtStmt Assign-stmt Assign-stmt ID = Expr;Expr Expr Add-Op Term | TermTerm Term Multiple-Op Factor | FactorFactor (Expr) | ID | NUMAdd_Op + | -Multiple_Op * | /T1语言 Program BEGIN Stmt-List ENDStmt-List Stmt-List Stmt| StmtStmt Assign-stmt | Read-stmt | Write-stmtAssign-stmt ID = Expr;Read-stmt RE

22、AD(IdList);Write-stmt WRITE(ExprList);Id-List Id-List, ID | IDExpr-List Expr-List, Expr | ExprExpr Expr Add-Op Term | TermTerm Term Multiple-Op Factor | FactorFactor (Expr) | ID | NUMAdd_Op + | -Multiple_Op * | /T2语言 Program BEGIN Stmt-List ENDStmt-List Stmt-List Stmt| StmtStmt Assign-stmt | Read-st

23、mt | Write-stmt| If-stmt| Repeat-stmt Assign-stmt ID = Expr;Read-stmt READ(IdList);Write-stmt WRITE(ExprList);If-stmt IF Expr THEN Stmt-List END; | IF Expr THEN Stmt-List ELSE Stmt-List END;Repeat-stmt REPEAT Stmt-List UNTIL Expr;Id-List Id-List, ID | IDExpr-List Expr-List, Expr | ExprExpr Expr Add-Op Term | TermTerm Term Multiple-Op Factor | FactorFactor (Expr) | ID | NUMAdd_Op + | -Multiple_Op * | /

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1