《编译原理王生原第二章》由会员分享,可在线阅读,更多相关《编译原理王生原第二章(42页珍藏版)》请在金锄头文库上搜索。
1、编译原理 第二讲 Decaf / Mind 编译实验项目 编译原理 项目框架的总体结构 实验环境 实验内容 Decaf / Mind 编译实验项目 实验安排 项目回顾 考核方案 编译原理 项目回顾 Decaf 语言 - 一种强类型的、单继承的简单面向对象语言 - 许多大学用作教学语言 Stanford University Massachusetts Institute of Technology University of Tennessee Brown University Texas A % % n +num_lines; +num_chars; . +num_chars; % Int
2、main() yylex(); printf( “num of lines = %d, num of chars = %dn, num_lines, num_chars ); return 0; Lex 源程序举例 count.l Lex return INTEGER; +*()n return yytext0; . /*do nothing*/ % Lex 源程序举例 Lex line: n | exp n printf (t%dn, $1); | error n ; exp: INTEGER $ = $1; | exp + exp $ = $1 + $3; | exp * exp $ =
3、$1 * $3; | ( exp ) $ = $2; ; % Lex int yylex() /* 自行编写或从 Lex 得到, 随后介绍 Lex和YACC 的联用,需删去这里的 yylex()定义 */ yyerror (char *s) printf (%sn, s); YACC 源程序举例 (续) Lex & YACC 简介 编译原理 - 设 exp.l 和exp.y 分别为前述的Lex 和YACC 源程序文件 可如下实现Lex 和YACC的联编: lex exp.l /* 产生lex.yy.c,其中包含 yylex() */ yacc -d exp.y /* 产生y.tab.c (其中
4、包含 yyparse())及 y.tab.h gcc y.tab.c lex.yy.c -ly -ll -o exp 运行结果 $ ./exp 4+3*5 19 Lex 与YACC 的联用举例 Lex & YACC 简介 编译原理 实验安排 时间安排 - 第 4 周开始 - 共 8 周 - 自行扩展部分随后两周内完成提交 提交方式 - 通过课程 ftp 服务器 - 具体要求参见实验说明 编译原理 考核方案 评分 - Phase 1-3 各 9 分 - Phase 4 8 分 - 自行扩展部分 5 分 (直接加入总评成绩) 迟交和扣分说明 - 共有 2 天的晚交额度(可在任何阶段使用) - 每超过额度一天在实验总成绩中扣两分 - 发现抄袭者取消阶段成绩 - 进一步的信息参见实验说明 编译原理 课后作业 1. 进一步阅读有关 Lex & Yacc 的技术文档 2. 掌握 Jflex & BYACC/J 的使用 编译原理 Thank You Thats all for today.