Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions 08-code-generator/Makefile
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
a.out: yacc lex
gcc -g y.tab.c lex.yy.c func.c sem_func.c gen_func.c main.c -w
gcc -g y.tab.c lex.yy.c func.c sem_func.c gen_func.c main.c -w -o code_generator
yacc: yacc.y
yacc -d yacc.y
lex: lex.l
lex lex.l

make clean:
rm a.out
rm code_generator
Binary file added 08-code-generator/mk_test
Binary file not shown.
26 changes: 26 additions & 0 deletions 08-code-generator/mk_test.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#include <stdio.h>
#include <stdlib.h>

int main(void){
for (int i=1; i<=13; i++){
char asm_cmd[128];
char asm_fname[128];
char interp_fname[128];
if (i < 10) {
sprintf(asm_cmd, "./code_generator ./test-src/test0%d.c", i);
sprintf(asm_fname, "test-asm/test0%d.asm", i);
sprintf(interp_fname, "test-interp/interp-res0%d", i);
} else {
sprintf(asm_cmd, "./code_generator ./test-src/test%d.c", i);
sprintf(asm_fname, "test-asm/test%d.asm", i);
sprintf(interp_fname, "test-interp/interp-res%d", i);
}
system(asm_cmd);
rename("./a.asm", asm_fname);

char interp_cmd[512];
sprintf(interp_cmd, "./interp %s > %s", asm_fname, interp_fname);
system(interp_cmd);
}
exit(0);
}
12 changes: 12 additions & 0 deletions 08-code-generator/test-asm/test01.asm
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
INT 0, 16
SUP 0, main
RET 0, 0
main:
INT 0, 20
LDA 1, 16
LOD 0, 12
LOD 1, 12
ADDI 0, 0
STX 0, 0
POP 0, 1
RET 0, 0
14 changes: 14 additions & 0 deletions 08-code-generator/test-asm/test02.asm
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
INT 0, 12
SUP 0, main
RET 0, 0
main:
INT 0, 16
LDA 1, 12
LITI 0, 10
LITI 0, 20
LITI 0, 3
MULI 0, 0
ADDI 0, 0
STX 0, 0
POP 0, 1
RET 0, 0
26 changes: 26 additions & 0 deletions 08-code-generator/test-asm/test03.asm
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
INT 0, 12
SUP 0, main
RET 0, 0
main:
INT 0, 16
L2:
LOD 1, 12
LITI 0, 5
LSSI 0, 0
JPC 0, L3
LOD 1, 12
LITI 0, 3
EQLI 0, 0
JPC 0, L4
JMP 0, L3
L4:
LOD 1, 12
LDA 1, 12
LDX 0, 0
INCI 0, 0
STO 0, 0
POP 0, 1
L1:
JMP 0, L2
L3:
RET 0, 0
24 changes: 24 additions & 0 deletions 08-code-generator/test-asm/test04.asm
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
INT 0, 12
SUP 0, main
RET 0, 0
add:
INT 0, 20
LDA 1, -4
LOD 1, 12
LOD 1, 16
ADDI 0, 0
STO 0, 0
RET 0, 0
RET 0, 0
main:
INT 0, 16
LDA 1, 12
INT 0, 16
LITI 0, 10
LITI 0, 20
POP 0, 5
ADDR 0, add
CAL 0, 0
STX 0, 0
POP 0, 1
RET 0, 0
30 changes: 30 additions & 0 deletions 08-code-generator/test-asm/test05.asm
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
INT 0, 32
SUP 0, main
RET 0, 0
main:
INT 0, 16
LDA 0, 12
LITI 0, 2
LITI 0, 4
MULI 0, 0
OFFSET 0, 0
LITI 0, 10
STX 0, 0
POP 0, 1
LDA 1, 12
LDA 0, 12
LITI 0, 1
LITI 0, 4
MULI 0, 0
OFFSET 0, 0
STX 0, 0
POP 0, 1
LOD 1, 12
LITI 0, 1
LITI 0, 4
MULI 0, 0
ADDI 0, 0
LITI 0, 20
STX 0, 0
POP 0, 1
RET 0, 0
22 changes: 22 additions & 0 deletions 08-code-generator/test-asm/test06.asm
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
INT 0, 12
SUP 0, main
RET 0, 0
set:
INT 0, 16
LOD 1, 12
LITI 0, 1
LITI 0, 4
MULI 0, 0
OFFSET 0, 0
LITI 0, 99
STX 0, 0
POP 0, 1
RET 0, 0
main:
INT 0, 24
INT 0, 12
LDA 1, 12
POP 0, 4
ADDR 0, set
CAL 0, 0
RET 0, 0
24 changes: 24 additions & 0 deletions 08-code-generator/test-asm/test07.asm
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
INT 0, 12
SUP 0, main
RET 0, 0
main:
INT 0, 20
LOD 1, 12
LITI 0, 5
GTRI 0, 0
JPCR 0, L1
LOD 1, 16
LDA 1, 16
LDX 0, 0
INCI 0, 0
STO 0, 0
LITI 0, 5
GTRI 0, 0
L1:
JPC 0, L2
LDA 1, 12
LITI 0, 1
STX 0, 0
POP 0, 1
L2:
RET 0, 0
38 changes: 38 additions & 0 deletions 08-code-generator/test-asm/test08.asm
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
INT 0, 12
SUP 0, main
RET 0, 0
fact:
INT 0, 16
LOD 1, 12
LITI 0, 1
EQLI 0, 0
JPC 0, L1
LDA 1, -4
LITI 0, 1
STO 0, 0
RET 0, 0
L1:
LDA 1, -4
LOD 1, 12
INT 0, 16
LOD 1, 12
LITI 0, 1
SUBI 0, 0
POP 0, 4
ADDR 0, fact
CAL 0, 0
MULI 0, 0
STO 0, 0
RET 0, 0
RET 0, 0
main:
INT 0, 16
LDA 1, 12
INT 0, 16
LITI 0, 5
POP 0, 4
ADDR 0, fact
CAL 0, 0
STX 0, 0
POP 0, 1
RET 0, 0
21 changes: 21 additions & 0 deletions 08-code-generator/test-asm/test09.asm
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
INT 0, 12
SUP 0, main
RET 0, 0
main:
INT 0, 20
LDA 1, 16
LOD 1, 12
LDA 1, 12
LDX 0, 0
INCI 0, 0
STO 0, 0
STX 0, 0
POP 0, 1
LDA 1, 16
LDA 1, 12
LDX 0, 0
INCI 0, 0
STX 0, 0
STX 0, 0
POP 0, 1
RET 0, 0
22 changes: 22 additions & 0 deletions 08-code-generator/test-asm/test10.asm
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
INT 0, 16
SUP 0, main
RET 0, 0
main:
INT 0, 20
LDA 1, 16
LOD 1, 12
CVTF 0, 0
LOD 0, 12
ADDF 0, 0
STX 0, 0
POP 0, 1
LDA 1, 12
LOD 1, 16
LITI 0, 10
CVTF 0, 0
ADDF 0, 0
CVTI 0, 0
STX 0, 0
POP 0, 1
RET 0, 0
.literal 12 3.140000
30 changes: 30 additions & 0 deletions 08-code-generator/test-asm/test11.asm
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
INT 0, 12
SUP 0, main
RET 0, 0
main:
INT 0, 20
LDA 1, 12
LITI 0, 1
STX 0, 0
POP 0, 1
L2:
LOD 1, 12
LITI 0, 3
LEQI 0, 0
JPC 0, L3
LDA 1, 16
LOD 1, 16
LOD 1, 12
ADDI 0, 0
STX 0, 0
POP 0, 1
L1:
LOD 1, 12
LDA 1, 12
LDX 0, 0
INCI 0, 0
STO 0, 0
POP 0, 1
JMP 0, L2
L3:
RET 0, 0
25 changes: 25 additions & 0 deletions 08-code-generator/test-asm/test12.asm
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
INT 0, 12
SUP 0, main
RET 0, 0
main:
INT 0, 16
L3:
LOD 1, 12
LDA 1, 12
LDX 0, 0
INCI 0, 0
STO 0, 0
POP 0, 1
LOD 1, 12
LITI 0, 2
EQLI 0, 0
JPC 0, L4
JMP 0, L2
L4:
L2:
LOD 1, 12
LITI 0, 5
LSSI 0, 0
JPT 0, L3
L1:
RET 0, 0
11 changes: 11 additions & 0 deletions 08-code-generator/test-asm/test13.asm
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
INT 0, 20
SUP 0, main
RET 0, 0
main:
INT 0, 16
LDA 1, 12
LDA 0, 12
STX 0, 0
POP 0, 1
RET 0, 0
.literal 12 "Hello"
19 changes: 19 additions & 0 deletions 08-code-generator/test-interp/interp-res01
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
======== symbol =========
1: printf -1
2: malloc -2
3: scanf -3
4: main 3
======== code ==========
0: INT 0,16
1: SUP 0,3
2: RET 0,0
3: INT 0,20
4: LDA 1,16
5: LOD 0,12
6: LOD 1,12
7: ADDI 0,0
8: STX 0,0
9: POP 0,1
10: RET 0,0
start execution
end execution
21 changes: 21 additions & 0 deletions 08-code-generator/test-interp/interp-res02
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
======== symbol =========
1: printf -1
2: malloc -2
3: scanf -3
4: main 3
======== code ==========
0: INT 0,12
1: SUP 0,3
2: RET 0,0
3: INT 0,16
4: LDA 1,12
5: LITI 0,10
6: LITI 0,20
7: LITI 0,3
8: MULI 0,0
9: ADDI 0,0
10: STX 0,0
11: POP 0,1
12: RET 0,0
start execution
end execution
Loading