Summary Files Commits Branches @commit @diff @stats
path: root / Year 3 / Compilers, Introduction / Exam.txt
blob: 1248364644cf98f7e368f12537552a4b24a00275 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# 1


if 0 then
   1  if 1 = 0 then 0 else 1 fi
else {
    0 <- 1
    1
}
fi

резултат
аргумент * 3
контролна връзка
обратен адрес
временна * 1

4 * 7 = 28

if flag then {
	if =0 then a
	else b
}
else {
	...
}

if a then b else c

beq a
label-true:
label-false:
end-if:


# 2

d?

# 5


 { y, z, i, j }
 1. k := i + j
 { y, z, k }
 2. x := k * 10
 { y, z, x }
 3. if x > z goto line 7
 { y, z }
 4. x := z - y
 { y, x, j }
 5. f := x * j
 6. goto line 10
 { x, y, f, j }
 7. x := y + 1
 { x, y, f, j }
 8. i := j
 { x, y, f, j }
 9. j := j + 2
 { x, y, f }
10. y := f * 2
 { x, y }
11. a := x + y
 { x, y }
12. if x = 0 goto line 7

# 6


нека O е типовата среда: функция от имена на променливи към техните типове
M(T, f) = (T 1 , T 2 , …, T n , T n+1) означава, за обект от тип T може да се извика метод f с


● O: типизира обектите
● M: типизира методите
● C: класа в който се намира изразът