Skip to content

Commit 77245b0

Browse files
committed
finished lab 7, 8, started 9 video 4
1 parent 45ac248 commit 77245b0

22 files changed

+10421
-0
lines changed

9LAB/.clang-format

+550
Large diffs are not rendered by default.

9LAB/Makefile

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# Ziad Arafat
2+
# Lab9 MIPS Code Generation from AST.c
3+
# April 2021
4+
5+
# FLAGS = -O0 -Wall -Wextra -pedantic
6+
7+
# the gcc options so I don't have to copy paste them everywhere
8+
# any time I make changes to them.
9+
FLAGS = -O0 -Wextra -pedantic
10+
11+
# Entry point target
12+
all: lab9
13+
14+
# Compile all the THINGS!
15+
lab9: lab9.l lab9.y ast.c ast.h symtable.c symtable.h emit.c emit.h
16+
lex lab9.l
17+
yacc -d --verbose --debug lab9.y
18+
gcc $(FLAGS) y.tab.c lex.yy.c ast.c symtable.c emit.c -o lab9 -lm
19+
20+
# remove the binary and other generated stuff
21+
clean:
22+
rm lab9 lex.yy.c y.tab.c y.tab.h
23+
24+
# runs valgrind to look for any memory mistakes
25+
memcheck:
26+
valgrind ./lab9 -s
27+
28+
# executes our code to test it's functionality
29+
test:
30+
./lab9 < testinput.txt

9LAB/README.md

+210
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,210 @@
1+
# CS370 Compilers Lab 7
2+
## Ziad Arafat - Apr 11 2021
3+
4+
In this lab we will re-implement our symbol table to check if variable have been
5+
declared and to check for matching operator sides.
6+
7+
## How to run
8+
9+
```
10+
make clean
11+
make
12+
./lab7 < lab7_sub.decaf
13+
```
14+
15+
## OUTPUT
16+
#### lab7_sub.decaf
17+
```
18+
LABEL OFFSET SIZE LEVEL TYPE SUBTYPE
19+
print_int 0 0 0 VOID Extern Method
20+
21+
LABEL OFFSET SIZE LEVEL TYPE SUBTYPE
22+
print_string0 0 0 VOID Extern Method
23+
print_int 0 0 0 VOID Extern Method
24+
25+
LABEL OFFSET SIZE LEVEL TYPE SUBTYPE
26+
_T4 18 1 2 INT Scalar
27+
_T3 17 1 2 INT Scalar
28+
_T2 16 1 2 INT Scalar
29+
_T1 15 1 2 INT Scalar
30+
_T0 14 1 2 INT Scalar
31+
x 4 10 2 INT Array
32+
y 3 1 1 INT Scalar
33+
f 0 0 0 INT Method
34+
b 2 1 1 INT Scalar
35+
z 201 1 0 INT Scalar
36+
Y 101 100 0 BOOL Array
37+
Z 1 100 0 INT Array
38+
y 0 1 0 INT Scalar
39+
print_string0 0 0 VOID Extern Method
40+
print_int 0 0 0 VOID Extern Method
41+
42+
LABEL OFFSET SIZE LEVEL TYPE SUBTYPE
43+
_T9 18 1 2 INT Scalar
44+
_T8 17 1 2 INT Scalar
45+
_T7 16 1 2 INT Scalar
46+
_T6 15 1 2 INT Scalar
47+
_T5 14 1 2 INT Scalar
48+
x 4 10 2 INT Array
49+
y 3 1 1 INT Scalar
50+
f 0 0 0 INT Method
51+
b 2 1 1 INT Scalar
52+
z 201 1 0 INT Scalar
53+
Y 101 100 0 BOOL Array
54+
Z 1 100 0 INT Array
55+
y 0 1 0 INT Scalar
56+
print_string0 0 0 VOID Extern Method
57+
print_int 0 0 0 VOID Extern Method
58+
59+
LABEL OFFSET SIZE LEVEL TYPE SUBTYPE
60+
y 3 1 1 INT Scalar
61+
f 0 0 0 INT Method
62+
b 2 1 1 INT Scalar
63+
z 201 1 0 INT Scalar
64+
Y 101 100 0 BOOL Array
65+
Z 1 100 0 INT Array
66+
y 0 1 0 INT Scalar
67+
print_string0 0 0 VOID Extern Method
68+
print_int 0 0 0 VOID Extern Method
69+
70+
LABEL OFFSET SIZE LEVEL TYPE SUBTYPE
71+
_T15 9 1 1 INT Scalar
72+
_T14 8 1 1 INT Scalar
73+
_T13 7 1 1 INT Scalar
74+
_T12 6 1 1 INT Scalar
75+
_T11 5 1 1 INT Scalar
76+
_T10 4 1 1 INT Scalar
77+
main 0 0 0 INT Method
78+
arg1 3 1 1 INT Scalar
79+
arg2 2 1 1 INT Scalar
80+
f 0 19 0 INT Method
81+
z 201 1 0 INT Scalar
82+
Y 101 100 0 BOOL Array
83+
Z 1 100 0 INT Array
84+
y 0 1 0 INT Scalar
85+
print_string0 0 0 VOID Extern Method
86+
print_int 0 0 0 VOID Extern Method
87+
88+
Parsing completed
89+
LABEL OFFSET SIZE LEVEL TYPE SUBTYPE
90+
main 0 10 0 INT Method
91+
f 0 19 0 INT Method
92+
z 201 1 0 INT Scalar
93+
Y 101 100 0 BOOL Array
94+
Z 1 100 0 INT Array
95+
y 0 1 0 INT Scalar
96+
print_string0 0 0 VOID Extern Method
97+
print_int 0 0 0 VOID Extern Method
98+
99+
EXTERN FUNC print_int
100+
EXTERN Type INT
101+
END EXTERN with Type:
102+
VOID EXTERN FUNC print_string
103+
EXTERN Type STRING
104+
END EXTERN with Type:
105+
VOID Package : foo
106+
Variable y with type INT = 7
107+
Variable Z[100] with type INT
108+
Variable Y[100] with type BOOLEAN
109+
Variable z with type INT = 10
110+
METHOD FUNCTION 'f' with type INT
111+
(
112+
Method ARGb INT
113+
)
114+
BLOCK STATEMENT
115+
Variable y with type INT
116+
BLOCK STATEMENT
117+
Variable x[10] with type INT
118+
ASSIGNMENT STATEMENT
119+
Variable Left x
120+
[
121+
EXPR -
122+
EXPR +
123+
CONSTANT INTEGER 2
124+
CONSTANT INTEGER 3
125+
CONSTANT INTEGER 5
126+
]
127+
EXPR +
128+
Variable Right b
129+
METHOD CALL name: f
130+
(
131+
METHOD ARG
132+
EXPR +
133+
CONSTANT INTEGER 5
134+
EXPR *
135+
Variable Right x
136+
[
137+
CONSTANT INTEGER 2
138+
]
139+
Variable Right b
140+
)
141+
BLOCK STATEMENT
142+
Variable x[10] with type INT
143+
ASSIGNMENT STATEMENT
144+
Variable Left x
145+
[
146+
EXPR -
147+
EXPR +
148+
CONSTANT INTEGER 2
149+
CONSTANT INTEGER 3
150+
CONSTANT INTEGER 5
151+
]
152+
EXPR +
153+
Variable Right b
154+
METHOD CALL name: f
155+
(
156+
METHOD ARG
157+
EXPR +
158+
CONSTANT INTEGER 5
159+
EXPR *
160+
Variable Right x
161+
[
162+
CONSTANT INTEGER 2
163+
]
164+
Variable Right b
165+
)
166+
METHOD FUNCTION 'main' with type INT
167+
(
168+
Method ARGarg1 INT
169+
Method ARGarg2 INT
170+
)
171+
BLOCK STATEMENT
172+
METHOD CALL name: print_int
173+
(
174+
METHOD ARG
175+
METHOD CALL name: f
176+
(
177+
METHOD ARG
178+
EXPR +
179+
EXPR -
180+
EXPR +
181+
Variable Right arg1
182+
Variable Right arg2
183+
Variable Right z
184+
Variable Right y
185+
)
186+
)
187+
METHOD CALL name: print_int
188+
(
189+
METHOD ARG
190+
METHOD CALL name: f
191+
(
192+
METHOD ARG
193+
EXPR +
194+
EXPR -
195+
EXPR +
196+
Variable Right arg1
197+
Variable Right arg2
198+
Variable Right z
199+
Variable Right y
200+
)
201+
)
202+
METHOD CALL name: print_string
203+
(
204+
METHOD ARG
205+
CONSTANT STRING "hello world\n"
206+
)
207+
208+
Finished printing AST
209+
210+
```

0 commit comments

Comments
 (0)