您的位置:首页 > 编程语言

中间代码生成器-5-编译原理

2012-12-16 17:50 309 查看
                          中间代码生成器

一、实验目的

掌握中间代码生成器的构造原理和编程方法。

二、实验内容

用自顶向下方法或Yacc进行语法分析的基础上,编写一个中间代码生成程序。见教材附录 A.1p394

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;
}


最终老师给的代码暂未公开

课件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: