From f3e5f9fd75e6ea0632601441c0148154038c58a4 Mon Sep 17 00:00:00 2001 From: daeun Date: Tue, 30 Dec 2025 14:28:45 +0900 Subject: [PATCH 1/4] build(Makefile): modify output filename --- 08-code-generator/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/08-code-generator/Makefile b/08-code-generator/Makefile index 0ba6866..3cfae8c 100644 --- a/08-code-generator/Makefile +++ b/08-code-generator/Makefile @@ -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 \ No newline at end of file + rm code_generator \ No newline at end of file From 06bad728f6570047377869c15896063a706f1712 Mon Sep 17 00:00:00 2001 From: daeun Date: Tue, 30 Dec 2025 14:30:13 +0900 Subject: [PATCH 2/4] chore(test): change dirname to test-src --- 08-code-generator/test-src/test01.c | 6 ++++++ 08-code-generator/test-src/test02.c | 4 ++++ 08-code-generator/test-src/test03.c | 9 +++++++++ 08-code-generator/test-src/test04.c | 7 +++++++ 08-code-generator/test-src/test05.c | 7 +++++++ 08-code-generator/test-src/test06.c | 7 +++++++ 08-code-generator/test-src/test07.c | 7 +++++++ 08-code-generator/test-src/test08.c | 8 ++++++++ 08-code-generator/test-src/test09.c | 6 ++++++ 08-code-generator/test-src/test10.c | 6 ++++++ 08-code-generator/test-src/test11.c | 7 +++++++ 08-code-generator/test-src/test12.c | 7 +++++++ 08-code-generator/test-src/test13.c | 4 ++++ 13 files changed, 85 insertions(+) create mode 100644 08-code-generator/test-src/test01.c create mode 100644 08-code-generator/test-src/test02.c create mode 100644 08-code-generator/test-src/test03.c create mode 100644 08-code-generator/test-src/test04.c create mode 100644 08-code-generator/test-src/test05.c create mode 100644 08-code-generator/test-src/test06.c create mode 100644 08-code-generator/test-src/test07.c create mode 100644 08-code-generator/test-src/test08.c create mode 100644 08-code-generator/test-src/test09.c create mode 100644 08-code-generator/test-src/test10.c create mode 100644 08-code-generator/test-src/test11.c create mode 100644 08-code-generator/test-src/test12.c create mode 100644 08-code-generator/test-src/test13.c diff --git a/08-code-generator/test-src/test01.c b/08-code-generator/test-src/test01.c new file mode 100644 index 0000000..fcbd73f --- /dev/null +++ b/08-code-generator/test-src/test01.c @@ -0,0 +1,6 @@ +int g = 10; +void main() { + int a = 5; + int b; + b = g + a; +} \ No newline at end of file diff --git a/08-code-generator/test-src/test02.c b/08-code-generator/test-src/test02.c new file mode 100644 index 0000000..570c0c2 --- /dev/null +++ b/08-code-generator/test-src/test02.c @@ -0,0 +1,4 @@ +void main() { + int a; + a = 10 + 20 * 3; +} \ No newline at end of file diff --git a/08-code-generator/test-src/test03.c b/08-code-generator/test-src/test03.c new file mode 100644 index 0000000..3bc99aa --- /dev/null +++ b/08-code-generator/test-src/test03.c @@ -0,0 +1,9 @@ +void main() { + int i = 0; + while(i < 5) { + if (i == 3) { + break; + } + i++; + } +} \ No newline at end of file diff --git a/08-code-generator/test-src/test04.c b/08-code-generator/test-src/test04.c new file mode 100644 index 0000000..9b79eb9 --- /dev/null +++ b/08-code-generator/test-src/test04.c @@ -0,0 +1,7 @@ +int add(int a, int b) { + return a + b; +} +void main() { + int res; + res = add(10, 20); +} \ No newline at end of file diff --git a/08-code-generator/test-src/test05.c b/08-code-generator/test-src/test05.c new file mode 100644 index 0000000..5fc295e --- /dev/null +++ b/08-code-generator/test-src/test05.c @@ -0,0 +1,7 @@ +int arr[5]; +void main() { + int *p; + arr[2] = 10; + p = &arr[1]; + *(p + 1) = 20; +} \ No newline at end of file diff --git a/08-code-generator/test-src/test06.c b/08-code-generator/test-src/test06.c new file mode 100644 index 0000000..e9c2fa9 --- /dev/null +++ b/08-code-generator/test-src/test06.c @@ -0,0 +1,7 @@ +void set(int p[]) { + p[1] = 99; +} +void main() { + int arr[3]; + set(arr); +} \ No newline at end of file diff --git a/08-code-generator/test-src/test07.c b/08-code-generator/test-src/test07.c new file mode 100644 index 0000000..eb1c7e9 --- /dev/null +++ b/08-code-generator/test-src/test07.c @@ -0,0 +1,7 @@ +void main() { + int a = 0; + int b = 10; + if (a > 5 && b++ > 5) { + a = 1; + } +} \ No newline at end of file diff --git a/08-code-generator/test-src/test08.c b/08-code-generator/test-src/test08.c new file mode 100644 index 0000000..fc65c28 --- /dev/null +++ b/08-code-generator/test-src/test08.c @@ -0,0 +1,8 @@ +int fact(int n) { + if (n == 1) return 1; + return n * fact(n - 1); +} +void main() { + int res; + res = fact(5); +} \ No newline at end of file diff --git a/08-code-generator/test-src/test09.c b/08-code-generator/test-src/test09.c new file mode 100644 index 0000000..db37bad --- /dev/null +++ b/08-code-generator/test-src/test09.c @@ -0,0 +1,6 @@ +void main() { + int a = 10; + int b; + b = a++; + b = ++a; +} \ No newline at end of file diff --git a/08-code-generator/test-src/test10.c b/08-code-generator/test-src/test10.c new file mode 100644 index 0000000..f37f27f --- /dev/null +++ b/08-code-generator/test-src/test10.c @@ -0,0 +1,6 @@ +void main() { + int a = 10; + float f; + f = a + 3.14; + a = f + 10; +} \ No newline at end of file diff --git a/08-code-generator/test-src/test11.c b/08-code-generator/test-src/test11.c new file mode 100644 index 0000000..40dc839 --- /dev/null +++ b/08-code-generator/test-src/test11.c @@ -0,0 +1,7 @@ +void main() { + int i; + int sum = 0; + for (i = 1; i <= 3; i++) { + sum = sum + i; + } +} \ No newline at end of file diff --git a/08-code-generator/test-src/test12.c b/08-code-generator/test-src/test12.c new file mode 100644 index 0000000..1edb174 --- /dev/null +++ b/08-code-generator/test-src/test12.c @@ -0,0 +1,7 @@ +void main() { + int i = 0; + do { + i++; + if (i == 2) continue; + } while (i < 5); +} \ No newline at end of file diff --git a/08-code-generator/test-src/test13.c b/08-code-generator/test-src/test13.c new file mode 100644 index 0000000..5a0e9d0 --- /dev/null +++ b/08-code-generator/test-src/test13.c @@ -0,0 +1,4 @@ +void main() { + char *s; + s = "Hello"; +} \ No newline at end of file From 995591dac335fc1f28714c1e37e607e36bfba71c Mon Sep 17 00:00:00 2001 From: daeun Date: Tue, 30 Dec 2025 14:30:44 +0900 Subject: [PATCH 3/4] chore(test): change dirname to test-src --- 08-code-generator/test/test01.c | 6 ------ 08-code-generator/test/test02.c | 4 ---- 08-code-generator/test/test03.c | 9 --------- 08-code-generator/test/test04.c | 7 ------- 08-code-generator/test/test05.c | 7 ------- 08-code-generator/test/test06.c | 7 ------- 08-code-generator/test/test07.c | 7 ------- 08-code-generator/test/test08.c | 8 -------- 08-code-generator/test/test09.c | 6 ------ 08-code-generator/test/test10.c | 6 ------ 08-code-generator/test/test11.c | 7 ------- 08-code-generator/test/test12.c | 7 ------- 08-code-generator/test/test13.c | 4 ---- 13 files changed, 85 deletions(-) delete mode 100644 08-code-generator/test/test01.c delete mode 100644 08-code-generator/test/test02.c delete mode 100644 08-code-generator/test/test03.c delete mode 100644 08-code-generator/test/test04.c delete mode 100644 08-code-generator/test/test05.c delete mode 100644 08-code-generator/test/test06.c delete mode 100644 08-code-generator/test/test07.c delete mode 100644 08-code-generator/test/test08.c delete mode 100644 08-code-generator/test/test09.c delete mode 100644 08-code-generator/test/test10.c delete mode 100644 08-code-generator/test/test11.c delete mode 100644 08-code-generator/test/test12.c delete mode 100644 08-code-generator/test/test13.c diff --git a/08-code-generator/test/test01.c b/08-code-generator/test/test01.c deleted file mode 100644 index fcbd73f..0000000 --- a/08-code-generator/test/test01.c +++ /dev/null @@ -1,6 +0,0 @@ -int g = 10; -void main() { - int a = 5; - int b; - b = g + a; -} \ No newline at end of file diff --git a/08-code-generator/test/test02.c b/08-code-generator/test/test02.c deleted file mode 100644 index 570c0c2..0000000 --- a/08-code-generator/test/test02.c +++ /dev/null @@ -1,4 +0,0 @@ -void main() { - int a; - a = 10 + 20 * 3; -} \ No newline at end of file diff --git a/08-code-generator/test/test03.c b/08-code-generator/test/test03.c deleted file mode 100644 index 3bc99aa..0000000 --- a/08-code-generator/test/test03.c +++ /dev/null @@ -1,9 +0,0 @@ -void main() { - int i = 0; - while(i < 5) { - if (i == 3) { - break; - } - i++; - } -} \ No newline at end of file diff --git a/08-code-generator/test/test04.c b/08-code-generator/test/test04.c deleted file mode 100644 index 9b79eb9..0000000 --- a/08-code-generator/test/test04.c +++ /dev/null @@ -1,7 +0,0 @@ -int add(int a, int b) { - return a + b; -} -void main() { - int res; - res = add(10, 20); -} \ No newline at end of file diff --git a/08-code-generator/test/test05.c b/08-code-generator/test/test05.c deleted file mode 100644 index 5fc295e..0000000 --- a/08-code-generator/test/test05.c +++ /dev/null @@ -1,7 +0,0 @@ -int arr[5]; -void main() { - int *p; - arr[2] = 10; - p = &arr[1]; - *(p + 1) = 20; -} \ No newline at end of file diff --git a/08-code-generator/test/test06.c b/08-code-generator/test/test06.c deleted file mode 100644 index e9c2fa9..0000000 --- a/08-code-generator/test/test06.c +++ /dev/null @@ -1,7 +0,0 @@ -void set(int p[]) { - p[1] = 99; -} -void main() { - int arr[3]; - set(arr); -} \ No newline at end of file diff --git a/08-code-generator/test/test07.c b/08-code-generator/test/test07.c deleted file mode 100644 index eb1c7e9..0000000 --- a/08-code-generator/test/test07.c +++ /dev/null @@ -1,7 +0,0 @@ -void main() { - int a = 0; - int b = 10; - if (a > 5 && b++ > 5) { - a = 1; - } -} \ No newline at end of file diff --git a/08-code-generator/test/test08.c b/08-code-generator/test/test08.c deleted file mode 100644 index fc65c28..0000000 --- a/08-code-generator/test/test08.c +++ /dev/null @@ -1,8 +0,0 @@ -int fact(int n) { - if (n == 1) return 1; - return n * fact(n - 1); -} -void main() { - int res; - res = fact(5); -} \ No newline at end of file diff --git a/08-code-generator/test/test09.c b/08-code-generator/test/test09.c deleted file mode 100644 index db37bad..0000000 --- a/08-code-generator/test/test09.c +++ /dev/null @@ -1,6 +0,0 @@ -void main() { - int a = 10; - int b; - b = a++; - b = ++a; -} \ No newline at end of file diff --git a/08-code-generator/test/test10.c b/08-code-generator/test/test10.c deleted file mode 100644 index f37f27f..0000000 --- a/08-code-generator/test/test10.c +++ /dev/null @@ -1,6 +0,0 @@ -void main() { - int a = 10; - float f; - f = a + 3.14; - a = f + 10; -} \ No newline at end of file diff --git a/08-code-generator/test/test11.c b/08-code-generator/test/test11.c deleted file mode 100644 index 40dc839..0000000 --- a/08-code-generator/test/test11.c +++ /dev/null @@ -1,7 +0,0 @@ -void main() { - int i; - int sum = 0; - for (i = 1; i <= 3; i++) { - sum = sum + i; - } -} \ No newline at end of file diff --git a/08-code-generator/test/test12.c b/08-code-generator/test/test12.c deleted file mode 100644 index 1edb174..0000000 --- a/08-code-generator/test/test12.c +++ /dev/null @@ -1,7 +0,0 @@ -void main() { - int i = 0; - do { - i++; - if (i == 2) continue; - } while (i < 5); -} \ No newline at end of file diff --git a/08-code-generator/test/test13.c b/08-code-generator/test/test13.c deleted file mode 100644 index 5a0e9d0..0000000 --- a/08-code-generator/test/test13.c +++ /dev/null @@ -1,4 +0,0 @@ -void main() { - char *s; - s = "Hello"; -} \ No newline at end of file From a5ac7f16b4fd646edda508224a5090213c2e650f Mon Sep 17 00:00:00 2001 From: daeun Date: Tue, 30 Dec 2025 14:48:48 +0900 Subject: [PATCH 4/4] test: test interpreter --- 08-code-generator/mk_test | Bin 0 -> 16088 bytes 08-code-generator/mk_test.c | 26 ++++++++++++ 08-code-generator/test-asm/test01.asm | 12 ++++++ 08-code-generator/test-asm/test02.asm | 14 +++++++ 08-code-generator/test-asm/test03.asm | 26 ++++++++++++ 08-code-generator/test-asm/test04.asm | 24 +++++++++++ 08-code-generator/test-asm/test05.asm | 30 ++++++++++++++ 08-code-generator/test-asm/test06.asm | 22 ++++++++++ 08-code-generator/test-asm/test07.asm | 24 +++++++++++ 08-code-generator/test-asm/test08.asm | 38 +++++++++++++++++ 08-code-generator/test-asm/test09.asm | 21 ++++++++++ 08-code-generator/test-asm/test10.asm | 22 ++++++++++ 08-code-generator/test-asm/test11.asm | 30 ++++++++++++++ 08-code-generator/test-asm/test12.asm | 25 ++++++++++++ 08-code-generator/test-asm/test13.asm | 11 +++++ 08-code-generator/test-interp/interp-res01 | 19 +++++++++ 08-code-generator/test-interp/interp-res02 | 21 ++++++++++ 08-code-generator/test-interp/interp-res03 | 33 +++++++++++++++ 08-code-generator/test-interp/interp-res04 | 31 ++++++++++++++ 08-code-generator/test-interp/interp-res05 | 37 +++++++++++++++++ 08-code-generator/test-interp/interp-res06 | 29 +++++++++++++ 08-code-generator/test-interp/interp-res07 | 31 ++++++++++++++ 08-code-generator/test-interp/interp-res08 | 45 +++++++++++++++++++++ 08-code-generator/test-interp/interp-res09 | 28 +++++++++++++ 08-code-generator/test-interp/interp-res10 | 28 +++++++++++++ 08-code-generator/test-interp/interp-res11 | 37 +++++++++++++++++ 08-code-generator/test-interp/interp-res12 | 32 +++++++++++++++ 08-code-generator/test-interp/interp-res13 | 17 ++++++++ 28 files changed, 713 insertions(+) create mode 100755 08-code-generator/mk_test create mode 100644 08-code-generator/mk_test.c create mode 100644 08-code-generator/test-asm/test01.asm create mode 100644 08-code-generator/test-asm/test02.asm create mode 100644 08-code-generator/test-asm/test03.asm create mode 100644 08-code-generator/test-asm/test04.asm create mode 100644 08-code-generator/test-asm/test05.asm create mode 100644 08-code-generator/test-asm/test06.asm create mode 100644 08-code-generator/test-asm/test07.asm create mode 100644 08-code-generator/test-asm/test08.asm create mode 100644 08-code-generator/test-asm/test09.asm create mode 100644 08-code-generator/test-asm/test10.asm create mode 100644 08-code-generator/test-asm/test11.asm create mode 100644 08-code-generator/test-asm/test12.asm create mode 100644 08-code-generator/test-asm/test13.asm create mode 100644 08-code-generator/test-interp/interp-res01 create mode 100644 08-code-generator/test-interp/interp-res02 create mode 100644 08-code-generator/test-interp/interp-res03 create mode 100644 08-code-generator/test-interp/interp-res04 create mode 100644 08-code-generator/test-interp/interp-res05 create mode 100644 08-code-generator/test-interp/interp-res06 create mode 100644 08-code-generator/test-interp/interp-res07 create mode 100644 08-code-generator/test-interp/interp-res08 create mode 100644 08-code-generator/test-interp/interp-res09 create mode 100644 08-code-generator/test-interp/interp-res10 create mode 100644 08-code-generator/test-interp/interp-res11 create mode 100644 08-code-generator/test-interp/interp-res12 create mode 100644 08-code-generator/test-interp/interp-res13 diff --git a/08-code-generator/mk_test b/08-code-generator/mk_test new file mode 100755 index 0000000000000000000000000000000000000000..f962a65be134dd229894bf875b2d978509d1e246 GIT binary patch literal 16088 zcmeHOYiu0V6~12Q;Xo2QApyr};{{>_tvr6jHVMdN6WhreIf)xP>O*bDWAE5rbzhyG z1v{d|V1i_f5&Z%DXn&Xz)D)!3s`7(MZ7~T=C{3$`N>wV9Y56P96wADa{{7`eSKfFE62 zvba9*W!_Ki6}t|7lz&D_uc%AJ`&*jo60zDuJe3=%9ogDa+tQ?E(^{i!82c55500tb zdk+W*Gm9LhQG~{n%<)jSj`V2%(3!sY^M5sOnEY_K6f zDI;kLw8l%@B6fFm?rhT=wMMPkt#4@(dS~w*J!V?wP#hYtdiS&?(kZjo=uemsdMKGr zQDeF?EocZ`4#9ORm7h|=65#L_=kc1Wio@kC6}yQ${;g->5`;t#oiKlo@clczMk$Wb z_XP8O#Fs^so_UtfZ&y5CU%UofE_itFxSR9vI8M1NczA9Dbyqw*j#n*3}1G&#KC;njFoinAUbV+AG1K#+kT13?CY3gz zoeLsxcc9)@Ux<<;#%#&c>kpL~Z;-sF>S&XXJd+&OXXV07YQbo@^X-Mt+RvkgCw zPPM)Xtvc&JfG3a3gIam@V<5r_PPJ|T=jhbZwFuj;*z4ice*;E%>MNWJ<<(b%$=^E1|pYLWZ=f#`Va zqgahjT(Vb2CtDu}VQ&7K`p-WIN~|0Jzvv_HPD4Ip(a9w> zcgj#5R~lwdA4&YfapZMqhU558P+W1?oO}i=(WxUD3C-(QW890Y@R2HY6bNSW8A5$R zC__!0g6s1R7|*>f*(v4!jB4k|g6i^H-e@nAI|4*|2yk2_PbFaE&8%IUwFYFRz9yy(2uT^)q)S0vk?=arv@&%HYArJh4xc9OC&L0$JSqg$>I`Y1 zQDfnnZ1_Gnz?1XF(tGj!HoiaV{fpyZ2aWSC4@~bO$t**Sk{Kf~%#>Doj zZJ*n+S-ze`|F6QQ0{r>i9-1R>!>0`R2q2eAs9--gK)*)uIlg0c#p9v2Ro-`AY#U&Z zfgl4x27(L(83-~EWFW{ukbxir|DPG)^?kga4<8M%&~iVqQi<*YLR{a8W%Er6Hz;t| zA8#a?*XmV~%NPm@NJ`W22UjttE?GIQ_50w$ZZo)qA!=~TqIx?>d-QCu9Px#IQ z{kfE#3vbh!wffqYoRk{xQu1|zfC}@pM7$4gP4f$0hZ4{{Nr?)R8i#2id%R8|SQWeA zJ0J8zK1}OdL6l_+9FgbyglN$Tl@d`UDk6&E>-Z(f-z<3CE3FWRp@MPvzGHq;+OK!- zBj#U%N}>K2JFnw1&N^}QR*tZUh2or$_O}TCIQWHhyUATY&ryCa?JM2;iTTS=DYVXd z4J0JYMjqTJdHD8-cu1($0$(9ExcOvl6Yy(8YuxW0=I=qC1rP3_IR5xw0Y2=p<7yoE zHK7fH$0_pQs6Ly2_1k~uTCl!ekL8ldQE>4{I#}9yrpd4C`1d08O4oPo z-?67d@7UX}!-D$uFYn#4r?U-c*c736L`fTM-!JstUHf+K=+gJ?+SSw1tM~5M+0_9a z{^kD>Ue^Dwmhzi1!#0FG4cbfKy5f!i$PDP!QhyNg*Zu3UY+4^SQZd{U(76w+V)2xo z%bGC($$*32pUsl5+>@X-ALKPa`x5dv+}Myu=sN5_;N;-Ogo3*b@^?Js2f*CJU%uJV zq;2#A+Lpp$uBpFqg_cU&rZ$wyX&Eb>F)e%4L-pt4usbFWf5=L!9XmT~adb)ZVIw;% zwAg40noww4O7nneW#j2oo}h!yG7|8d#_0 zCDY7d8ePLNh{lqNp@y0A;5syAB;ycFxx=Lq8VvCy4BN$<>OZLAJPU4B_$^Vzzt4^5 zS)`V>Tt~beJ~+2w|6=>O&=w2NXOtua?!)o=`}cL>|JdHb-=9f^x{Ima=u+lI#DbYRp+kYE0UVm{bnGzmzJypfu{w1Jcm8ZMM zi}$VZK1{zo%Z%@XZ@I^x=jq34frP?#N?Mee{}>cFcIk1$oj>!wTHZg4_a7Ga{a9WJ&d725JU^@;f4@Dp +#include + +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); +} \ No newline at end of file diff --git a/08-code-generator/test-asm/test01.asm b/08-code-generator/test-asm/test01.asm new file mode 100644 index 0000000..f717d57 --- /dev/null +++ b/08-code-generator/test-asm/test01.asm @@ -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 diff --git a/08-code-generator/test-asm/test02.asm b/08-code-generator/test-asm/test02.asm new file mode 100644 index 0000000..95b006c --- /dev/null +++ b/08-code-generator/test-asm/test02.asm @@ -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 diff --git a/08-code-generator/test-asm/test03.asm b/08-code-generator/test-asm/test03.asm new file mode 100644 index 0000000..e9a57a4 --- /dev/null +++ b/08-code-generator/test-asm/test03.asm @@ -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 diff --git a/08-code-generator/test-asm/test04.asm b/08-code-generator/test-asm/test04.asm new file mode 100644 index 0000000..f02003e --- /dev/null +++ b/08-code-generator/test-asm/test04.asm @@ -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 diff --git a/08-code-generator/test-asm/test05.asm b/08-code-generator/test-asm/test05.asm new file mode 100644 index 0000000..4e0f876 --- /dev/null +++ b/08-code-generator/test-asm/test05.asm @@ -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 diff --git a/08-code-generator/test-asm/test06.asm b/08-code-generator/test-asm/test06.asm new file mode 100644 index 0000000..90a29c5 --- /dev/null +++ b/08-code-generator/test-asm/test06.asm @@ -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 diff --git a/08-code-generator/test-asm/test07.asm b/08-code-generator/test-asm/test07.asm new file mode 100644 index 0000000..58a62bd --- /dev/null +++ b/08-code-generator/test-asm/test07.asm @@ -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 diff --git a/08-code-generator/test-asm/test08.asm b/08-code-generator/test-asm/test08.asm new file mode 100644 index 0000000..5105f29 --- /dev/null +++ b/08-code-generator/test-asm/test08.asm @@ -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 diff --git a/08-code-generator/test-asm/test09.asm b/08-code-generator/test-asm/test09.asm new file mode 100644 index 0000000..5858426 --- /dev/null +++ b/08-code-generator/test-asm/test09.asm @@ -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 diff --git a/08-code-generator/test-asm/test10.asm b/08-code-generator/test-asm/test10.asm new file mode 100644 index 0000000..d8771e3 --- /dev/null +++ b/08-code-generator/test-asm/test10.asm @@ -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 diff --git a/08-code-generator/test-asm/test11.asm b/08-code-generator/test-asm/test11.asm new file mode 100644 index 0000000..ba93374 --- /dev/null +++ b/08-code-generator/test-asm/test11.asm @@ -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 diff --git a/08-code-generator/test-asm/test12.asm b/08-code-generator/test-asm/test12.asm new file mode 100644 index 0000000..91356f6 --- /dev/null +++ b/08-code-generator/test-asm/test12.asm @@ -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 diff --git a/08-code-generator/test-asm/test13.asm b/08-code-generator/test-asm/test13.asm new file mode 100644 index 0000000..19b3a6f --- /dev/null +++ b/08-code-generator/test-asm/test13.asm @@ -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" diff --git a/08-code-generator/test-interp/interp-res01 b/08-code-generator/test-interp/interp-res01 new file mode 100644 index 0000000..3912144 --- /dev/null +++ b/08-code-generator/test-interp/interp-res01 @@ -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 diff --git a/08-code-generator/test-interp/interp-res02 b/08-code-generator/test-interp/interp-res02 new file mode 100644 index 0000000..077e8b2 --- /dev/null +++ b/08-code-generator/test-interp/interp-res02 @@ -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 diff --git a/08-code-generator/test-interp/interp-res03 b/08-code-generator/test-interp/interp-res03 new file mode 100644 index 0000000..40343e9 --- /dev/null +++ b/08-code-generator/test-interp/interp-res03 @@ -0,0 +1,33 @@ +======== symbol ========= + 1: printf -1 + 2: malloc -2 + 3: scanf -3 + 4: main 3 + 5: L2 4 + 6: L3 20 + 7: L4 13 + 8: L1 19 +======== code ========== + 0: INT 0,12 + 1: SUP 0,3 + 2: RET 0,0 + 3: INT 0,16 + 4: LOD 1,12 + 5: LITI 0,5 + 6: LSSI 0,0 + 7: JPC 0,20 + 8: LOD 1,12 + 9: LITI 0,3 + 10: EQLI 0,0 + 11: JPC 0,13 + 12: JMP 0,20 + 13: LOD 1,12 + 14: LDA 1,12 + 15: LDX 0,0 + 16: INCI 0,0 + 17: STO 0,0 + 18: POP 0,1 + 19: JMP 0,4 + 20: RET 0,0 +start execution +end execution diff --git a/08-code-generator/test-interp/interp-res04 b/08-code-generator/test-interp/interp-res04 new file mode 100644 index 0000000..037489a --- /dev/null +++ b/08-code-generator/test-interp/interp-res04 @@ -0,0 +1,31 @@ +======== symbol ========= + 1: printf -1 + 2: malloc -2 + 3: scanf -3 + 4: main 11 + 5: add 3 +======== code ========== + 0: INT 0,12 + 1: SUP 0,11 + 2: RET 0,0 + 3: INT 0,20 + 4: LDA 1,-4 + 5: LOD 1,12 + 6: LOD 1,16 + 7: ADDI 0,0 + 8: STO 0,0 + 9: RET 0,0 + 10: RET 0,0 + 11: INT 0,16 + 12: LDA 1,12 + 13: INT 0,16 + 14: LITI 0,10 + 15: LITI 0,20 + 16: POP 0,5 + 17: ADDR 0,3 + 18: CAL 0,0 + 19: STX 0,0 + 20: POP 0,1 + 21: RET 0,0 +start execution +end execution diff --git a/08-code-generator/test-interp/interp-res05 b/08-code-generator/test-interp/interp-res05 new file mode 100644 index 0000000..2888431 --- /dev/null +++ b/08-code-generator/test-interp/interp-res05 @@ -0,0 +1,37 @@ +======== symbol ========= + 1: printf -1 + 2: malloc -2 + 3: scanf -3 + 4: main 3 +======== code ========== + 0: INT 0,32 + 1: SUP 0,3 + 2: RET 0,0 + 3: INT 0,16 + 4: LDA 0,12 + 5: LITI 0,2 + 6: LITI 0,4 + 7: MULI 0,0 + 8: OFFSET 0,0 + 9: LITI 0,10 + 10: STX 0,0 + 11: POP 0,1 + 12: LDA 1,12 + 13: LDA 0,12 + 14: LITI 0,1 + 15: LITI 0,4 + 16: MULI 0,0 + 17: OFFSET 0,0 + 18: STX 0,0 + 19: POP 0,1 + 20: LOD 1,12 + 21: LITI 0,1 + 22: LITI 0,4 + 23: MULI 0,0 + 24: ADDI 0,0 + 25: LITI 0,20 + 26: STX 0,0 + 27: POP 0,1 + 28: RET 0,0 +start execution +end execution diff --git a/08-code-generator/test-interp/interp-res06 b/08-code-generator/test-interp/interp-res06 new file mode 100644 index 0000000..fe4d10c --- /dev/null +++ b/08-code-generator/test-interp/interp-res06 @@ -0,0 +1,29 @@ +======== symbol ========= + 1: printf -1 + 2: malloc -2 + 3: scanf -3 + 4: main 13 + 5: set 3 +======== code ========== + 0: INT 0,12 + 1: SUP 0,13 + 2: RET 0,0 + 3: INT 0,16 + 4: LOD 1,12 + 5: LITI 0,1 + 6: LITI 0,4 + 7: MULI 0,0 + 8: OFFSET 0,0 + 9: LITI 0,99 + 10: STX 0,0 + 11: POP 0,1 + 12: RET 0,0 + 13: INT 0,24 + 14: INT 0,12 + 15: LDA 1,12 + 16: POP 0,4 + 17: ADDR 0,3 + 18: CAL 0,0 + 19: RET 0,0 +start execution +end execution diff --git a/08-code-generator/test-interp/interp-res07 b/08-code-generator/test-interp/interp-res07 new file mode 100644 index 0000000..e021636 --- /dev/null +++ b/08-code-generator/test-interp/interp-res07 @@ -0,0 +1,31 @@ +======== symbol ========= + 1: printf -1 + 2: malloc -2 + 3: scanf -3 + 4: main 3 + 5: L1 15 + 6: L2 20 +======== code ========== + 0: INT 0,12 + 1: SUP 0,3 + 2: RET 0,0 + 3: INT 0,20 + 4: LOD 1,12 + 5: LITI 0,5 + 6: GTRI 0,0 + 7: JPCR 0,15 + 8: LOD 1,16 + 9: LDA 1,16 + 10: LDX 0,0 + 11: INCI 0,0 + 12: STO 0,0 + 13: LITI 0,5 + 14: GTRI 0,0 + 15: JPC 0,20 + 16: LDA 1,12 + 17: LITI 0,1 + 18: STX 0,0 + 19: POP 0,1 + 20: RET 0,0 +start execution +end execution diff --git a/08-code-generator/test-interp/interp-res08 b/08-code-generator/test-interp/interp-res08 new file mode 100644 index 0000000..82ce992 --- /dev/null +++ b/08-code-generator/test-interp/interp-res08 @@ -0,0 +1,45 @@ +======== symbol ========= + 1: printf -1 + 2: malloc -2 + 3: scanf -3 + 4: main 25 + 5: fact 3 + 6: L1 12 +======== code ========== + 0: INT 0,12 + 1: SUP 0,25 + 2: RET 0,0 + 3: INT 0,16 + 4: LOD 1,12 + 5: LITI 0,1 + 6: EQLI 0,0 + 7: JPC 0,12 + 8: LDA 1,-4 + 9: LITI 0,1 + 10: STO 0,0 + 11: RET 0,0 + 12: LDA 1,-4 + 13: LOD 1,12 + 14: INT 0,16 + 15: LOD 1,12 + 16: LITI 0,1 + 17: SUBI 0,0 + 18: POP 0,4 + 19: ADDR 0,3 + 20: CAL 0,0 + 21: MULI 0,0 + 22: STO 0,0 + 23: RET 0,0 + 24: RET 0,0 + 25: INT 0,16 + 26: LDA 1,12 + 27: INT 0,16 + 28: LITI 0,5 + 29: POP 0,4 + 30: ADDR 0,3 + 31: CAL 0,0 + 32: STX 0,0 + 33: POP 0,1 + 34: RET 0,0 +start execution +end execution diff --git a/08-code-generator/test-interp/interp-res09 b/08-code-generator/test-interp/interp-res09 new file mode 100644 index 0000000..bde7fea --- /dev/null +++ b/08-code-generator/test-interp/interp-res09 @@ -0,0 +1,28 @@ +======== 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,20 + 4: LDA 1,16 + 5: LOD 1,12 + 6: LDA 1,12 + 7: LDX 0,0 + 8: INCI 0,0 + 9: STO 0,0 + 10: STX 0,0 + 11: POP 0,1 + 12: LDA 1,16 + 13: LDA 1,12 + 14: LDX 0,0 + 15: INCI 0,0 + 16: STX 0,0 + 17: STX 0,0 + 18: POP 0,1 + 19: RET 0,0 +start execution +end execution diff --git a/08-code-generator/test-interp/interp-res10 b/08-code-generator/test-interp/interp-res10 new file mode 100644 index 0000000..2d54b32 --- /dev/null +++ b/08-code-generator/test-interp/interp-res10 @@ -0,0 +1,28 @@ +======== 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 1,12 + 6: CVTF 0,0 + 7: LOD 0,12 + 8: ADDF 0,0 + 9: STX 0,0 + 10: POP 0,1 + 11: LDA 1,12 + 12: LOD 1,16 + 13: LITI 0,10 + 14: CVTF 0,0 + 15: ADDF 0,0 + 16: CVTI 0,0 + 17: STX 0,0 + 18: POP 0,1 + 19: RET 0,0 +start execution +end execution diff --git a/08-code-generator/test-interp/interp-res11 b/08-code-generator/test-interp/interp-res11 new file mode 100644 index 0000000..f46b438 --- /dev/null +++ b/08-code-generator/test-interp/interp-res11 @@ -0,0 +1,37 @@ +======== symbol ========= + 1: printf -1 + 2: malloc -2 + 3: scanf -3 + 4: main 3 + 5: L2 8 + 6: L3 25 + 7: L1 18 +======== code ========== + 0: INT 0,12 + 1: SUP 0,3 + 2: RET 0,0 + 3: INT 0,20 + 4: LDA 1,12 + 5: LITI 0,1 + 6: STX 0,0 + 7: POP 0,1 + 8: LOD 1,12 + 9: LITI 0,3 + 10: LEQI 0,0 + 11: JPC 0,25 + 12: LDA 1,16 + 13: LOD 1,16 + 14: LOD 1,12 + 15: ADDI 0,0 + 16: STX 0,0 + 17: POP 0,1 + 18: LOD 1,12 + 19: LDA 1,12 + 20: LDX 0,0 + 21: INCI 0,0 + 22: STO 0,0 + 23: POP 0,1 + 24: JMP 0,8 + 25: RET 0,0 +start execution +end execution diff --git a/08-code-generator/test-interp/interp-res12 b/08-code-generator/test-interp/interp-res12 new file mode 100644 index 0000000..27522e9 --- /dev/null +++ b/08-code-generator/test-interp/interp-res12 @@ -0,0 +1,32 @@ +======== symbol ========= + 1: printf -1 + 2: malloc -2 + 3: scanf -3 + 4: main 3 + 5: L3 4 + 6: L4 15 + 7: L2 15 + 8: L1 19 +======== code ========== + 0: INT 0,12 + 1: SUP 0,3 + 2: RET 0,0 + 3: INT 0,16 + 4: LOD 1,12 + 5: LDA 1,12 + 6: LDX 0,0 + 7: INCI 0,0 + 8: STO 0,0 + 9: POP 0,1 + 10: LOD 1,12 + 11: LITI 0,2 + 12: EQLI 0,0 + 13: JPC 0,15 + 14: JMP 0,15 + 15: LOD 1,12 + 16: LITI 0,5 + 17: LSSI 0,0 + 18: JPT 0,4 + 19: RET 0,0 +start execution +end execution diff --git a/08-code-generator/test-interp/interp-res13 b/08-code-generator/test-interp/interp-res13 new file mode 100644 index 0000000..6dd2fbe --- /dev/null +++ b/08-code-generator/test-interp/interp-res13 @@ -0,0 +1,17 @@ +======== symbol ========= + 1: printf -1 + 2: malloc -2 + 3: scanf -3 + 4: main 3 +======== code ========== + 0: INT 0,20 + 1: SUP 0,3 + 2: RET 0,0 + 3: INT 0,16 + 4: LDA 1,12 + 5: LDA 0,12 + 6: STX 0,0 + 7: POP 0,1 + 8: RET 0,0 +start execution +end execution