中间代码生成器-5-编译原理
2012-12-16 17:50
309 查看
中间代码生成器
一、实验目的
掌握中间代码生成器的构造原理和编程方法。
二、实验内容
用自顶向下方法或Yacc进行语法分析的基础上,编写一个中间代码生成程序。(见教材附录 A.1,p394)
program → block
block→ { decls stmts }
decls → decls decl | e
decl → type id ;
type → type [num] //数组可以不做
| basic //四种基本数据类型 int | float | char | bool
stmts → stmts stmt | e
stmt → id= expr ;
| if ( bool ) stmt
| if ( bool) stmt else stmt
| while (bool) stmt
| do stmt while (bool ) ;
| break ; //break可以不做
| block
bool → bool || join | join
join → join && equality | equality
equality → equality == rel | equality != rel | rel
rel → expr < expr
| expr <= expr
| expr > expr
| expr >= expr
| expr
expr → expr + term
| expr - term
| term
term → term * unary
| term / unary
| unary
unary → !unary | - unary | factor
factor → ( expr ) | id| num
。
三、实验要求
1.个人完成,提交实验报告。
2.实验的结果为:生成中间代码 (三地址码)
{
a=10;
x = b - c;
y = a * x;
z = x * d;
abcd = a + x +y;
if(a>10)
a=a+1;
a=a+2;
}
实验结果生成的代码片段
0: a = 10
1: t0 = b - c
2: x = t0
3: t1 = a * x
4: y = t1
5: t2 = x * d
6: z = t2
7: t3 = a + x
8: t4 = t3 + y
9: abcd = t4
10: if a > 10 goto 12
11: goto 14
12: t5 = a + 1
13: a = t5
14: t6 = a + 2
15: a = t6
个人对于本次中间代码生成器-编译实验的心得:
View Code
最终老师给的代码暂未公开
课件
一、实验目的
掌握中间代码生成器的构造原理和编程方法。
二、实验内容
用自顶向下方法或Yacc进行语法分析的基础上,编写一个中间代码生成程序。(见教材附录 A.1,p394)
program → block
block→ { decls stmts }
decls → decls decl | e
decl → type id ;
type → type [num] //数组可以不做
| basic //四种基本数据类型 int | float | char | bool
stmts → stmts stmt | e
stmt → id= expr ;
| if ( bool ) stmt
| if ( bool) stmt else stmt
| while (bool) stmt
| do stmt while (bool ) ;
| break ; //break可以不做
| block
bool → bool || join | join
join → join && equality | equality
equality → equality == rel | equality != rel | rel
rel → expr < expr
| expr <= expr
| expr > expr
| expr >= expr
| expr
expr → expr + term
| expr - term
| term
term → term * unary
| term / unary
| unary
unary → !unary | - unary | factor
factor → ( expr ) | id| num
。
三、实验要求
1.个人完成,提交实验报告。
2.实验的结果为:生成中间代码 (三地址码)
{
a=10;
x = b - c;
y = a * x;
z = x * d;
abcd = a + x +y;
if(a>10)
a=a+1;
a=a+2;
}
实验结果生成的代码片段
0: a = 10
1: t0 = b - c
2: x = t0
3: t1 = a * x
4: y = t1
5: t2 = x * d
6: z = t2
7: t3 = a + x
8: t4 = t3 + y
9: abcd = t4
10: if a > 10 goto 12
11: goto 14
12: t5 = a + 1
13: a = t5
14: t6 = a + 2
15: a = t6
个人对于本次中间代码生成器-编译实验的心得:
View Code
{ a=10; x = b - c; y = a * x; z = x * d; abcd = a + x +y; if(a>10) a=a+1; a=a+2; while(a>0) a=a-1; b=b+1; }
最终老师给的代码暂未公开
课件
相关文章推荐
- 中间代码生成器-5-编译原理
- 编译原理——中间代码生成
- 【编译原理】中间代码(一)
- 编译原理-词法分析-语法分析-语义分析生成中间代码-python版
- 编译原理——中间代码生成
- 编译原理结构框架7语义分析与中间代码生成
- 【编译原理】中间代码(二)
- 语义分析和中间代码生成——哈工大编译原理课程(三)
- 编译原理(七)中间代码生成
- 编译原理过程简述及中间代码优化
- 编译原理之代码优化
- 内存数据库内核开发 工作日志(内存索引实现原理)(附红黑树实现清晰完整直接可编译运行代码)(十)
- 编译原理及实践 课本代码的使用说明
- 编译原理(九) LR(0)文法分析法(算法描述和C++代码实现)
- 编译原理程序设计实践(三) 错误处理和词法分析代码
- 栈式虚拟机中间代码编译为x86指令
- 编译原理 LR(0)项目集规范族的构造 LR(0)分析表+分析语句 详解分析+代码
- 编译原理之代码生成
- 吉首大学_编译原理实验题_基于预測方法的语法分析程序的设计【通过代码】