From e1548a9ff0ad6b7cb725ffdbd4519f5e49ae812f Mon Sep 17 00:00:00 2001 From: Trevor Maze Date: Wed, 28 Jan 2026 16:40:47 -0500 Subject: [PATCH] AST Improvements --- Sources/rxcc/rxcc.swift | 43 ++++++++++++++++++++++++++++++++++--- bin/a.out | Bin 15680 -> 0 bytes bin/bitwise.s | 4 ---- bin/bitwise_zero.s | 4 ---- bin/missing_const.s | 4 ---- bin/missing_semicolon.s | 4 ---- bin/multi_digit.s | 4 ---- bin/neg.s | 4 ---- bin/nested_missing_const.s | 4 ---- bin/nested_ops.s | 4 ---- bin/nested_ops_2.s | 4 ---- bin/newlines.s | 4 ---- bin/no_brace.s | 4 ---- bin/no_newlines.s | 4 ---- bin/no_semicolon.s | 4 ---- bin/not_five.s | 4 ---- bin/not_zero.s | 4 ---- bin/return_0.s | 4 ---- bin/return_2.s | 4 ---- bin/spaces.s | 4 ---- bin/wrong_order.s | 4 ---- 21 files changed, 40 insertions(+), 79 deletions(-) delete mode 100755 bin/a.out delete mode 100644 bin/bitwise.s delete mode 100644 bin/bitwise_zero.s delete mode 100644 bin/missing_const.s delete mode 100644 bin/missing_semicolon.s delete mode 100644 bin/multi_digit.s delete mode 100644 bin/neg.s delete mode 100644 bin/nested_missing_const.s delete mode 100644 bin/nested_ops.s delete mode 100644 bin/nested_ops_2.s delete mode 100644 bin/newlines.s delete mode 100644 bin/no_brace.s delete mode 100644 bin/no_newlines.s delete mode 100644 bin/no_semicolon.s delete mode 100644 bin/not_five.s delete mode 100644 bin/not_zero.s delete mode 100644 bin/return_0.s delete mode 100644 bin/return_2.s delete mode 100644 bin/spaces.s delete mode 100644 bin/wrong_order.s diff --git a/Sources/rxcc/rxcc.swift b/Sources/rxcc/rxcc.swift index 2a20a38..f13a325 100644 --- a/Sources/rxcc/rxcc.swift +++ b/Sources/rxcc/rxcc.swift @@ -234,7 +234,7 @@ func getTestFiles() -> [TestFile] { var testFiles: [TestFile] = [TestFile]() let fileManager = FileManager.default - let path = "c/tests/stage_2" + let path = "c/tests/stage_1" do { let validItems = try fileManager.contentsOfDirectory(atPath: path + "/valid") @@ -301,7 +301,7 @@ func parse(lexed: [Substring]) -> String { print("Success") print(abstractSyntaxTree.text()) print("Assembly:") - let assembly: String = generateOutput(tree: abstractSyntaxTree) + let assembly: String = generateOutput(abstractSyntaxTree) print(assembly) return assembly } @@ -310,7 +310,7 @@ func parse(lexed: [Substring]) -> String { return "" } -func generateOutput(tree: SyntaxTreeNode) -> String { +/*func generateOutput(tree: SyntaxTreeNode) -> String { var text: String = "" switch tree.variant { case .Integer: @@ -329,6 +329,43 @@ func generateOutput(tree: SyntaxTreeNode) -> String { text += generateOutput(tree: child) } + return text +}*/ + +func generateOutput(_ node: SyntaxTreeNode) -> String { + var text: String = "" + switch node.variant { + case .Root: + for child in node.children { + text += generateOutput(child) + } + break + + case .Integer: + text += " .globl \(node.value)\n\(node.value):\n" + for child in node.children { + text += generateOutput(child) + } + break + + case .ReturnInteger: + var returnValue: String = "" + if node.children.count != 1 { + print("\(node.variant) cannot have more than one child node") + return "[ERROR]" + } + returnValue += generateOutput(node.children[0]) + text += " movl $\(returnValue), %eax\n ret\n" + break + + case .LiteralInteger: + text += node.value + break + + default: + break + } + return text } diff --git a/bin/a.out b/bin/a.out deleted file mode 100755 index ba348701042680de82d36a169a01293e8d914398..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15680 zcmeHOU2Ggz6~4Pp$fil-javsdiO7Jesug%*JBbxaldfZLGDgl1v5SN%dKr7i_DcI> z?am^*2*nV7YL$vm30`<9@Bj}8LDdHkFB=6F@_X3R1$vX@el@}tQ(kSJ7wqj0rrrGWlDNo~J(F3A~jBK}E%5jG%0hOEw+wJ56k<&OR z4FFLdx96}iCC40NToe(QwBxSi-AEySdMm1IBvMvg=NM6?QRvuRu$z88EO9>FKgflsx_kP0N$hq= z#c6y{?0{(RePkz7LNxv{V0v7Z_O=_pbr}bsh{i8N)CAA9a~Gac*;Uo%zMwp#GF#+q zN@iU?2ObW#KloAZJ|BN{!5AV`?_e36X$f{^)`HM8~y>}-_fNWr8S++oNk7GBh*#DTq9;~ z+1K;snqMhD8z?U3a~oCXrY6sf>k)UvJrU=R9anmC=DaQijbNeN41>nZ`SD7<7R>mw zm4ND6sMc#zyN*=5Dk{1lX>8~(x)3rXbAK@(S_jL!c~ssd+$*2^0!^zd-3gl@cq zet*Od$n^`pEfwYpQ8{?X?I$Ci=WKEee~{p_k%~FqO7LAi63r=-y7{|H(AY2NKU@(H6){CBvX7k0kP@b0@| zKUMvVRK2@%yZ6W{E8Y+!{WYV1;^PdDZFp0Q6u<7Hm;UfT#CqzVS5f?VhJ zeD9HoO?&R&>Zu|XtJblnysM|~=B}EvL3J=upY1;upY1;upY1;upY1;upY1;upamy z^8kP6${gx>4}X^8?@fo-J01SUh3}}DXD_SFaz1lt@2=c6QeZv)CV%IRPUjIqHL=Tl z(c*7RsDr;-a$=5uHdzl?4_FUa4_FUa4_FUa4_FUa4_FUa5B&Fe0C9_mQ$!3RVmJ4q z%jT_5sryBCB;N5Mkr5AhNMyu09uygIk%;d``I{S^I;-50U`E6!uF8uf$3=2lm-71} zQ9UQPM{q!}Ul6cMGM-e7cH6>Jkf%wo|63>O50OT7L*xOmr!U2(zwi^iJ{vhF<$n=5 z8Jj6h{6_)tkRvhDJt*hKG)AXBqK){yWs~J83QU zXNLYWfcS7n6gVEZoBk2vvucmJB=bwu)!T(%P4UNt$9#qUdnuDqZ&mq1#9(~hZ}>ii z`4^Qc^-;=jyO{sr*Npyth4~ErYn18M|Cfz^ubOb6xryEM+fPez;187P7Qfv~C+!uWXhwLN_&yphN9Ke1UlbL! zL?7c0tB)Cek9tV%Q{X>EJohK9|03}YloI%L;&Crb(CYid_hspBl$xJvdae-;yLF00 z_h-vG^cNHnvlOddnsNFstT&q4Z!N32dUdH1gh9z2 z>aM{d^JVQf8vcq7YGGqV%{TmNpi8Z4b%jh4k|xb?iz;<0sFk=&TA#fv(2X1%9aA!6@WA1 z?E+o*0BqfO5OX^u2v5NccIpDmm2k@pb@SpH>PG=W!kJ! zE-ANMqa6xM$|x@S%|+#wR%%pfgkd8p`Ebx^mg}`Gf~K-YQ1RJ->nVrI4TEJm@~~4` z-FVLp7Gv5&?-vPYgO_p9YOYPn7|)4^S;P$sIHoT^-!hEUGxV2^bY@Hw#u zr29Wd1-yoVJ=QHitoP7==mD3=p4UW>u`U7*NyF*>qd!+D!(#$_tjmCHQAGRc^N*g- z(VjV@iu5f^{XHC&2WA2Gz4Ir_a-Gi@iKw@SMc@*eKH>J^#Ka z_VKgZ5lz9gK4jom#2)^`dI5;>uGRf=D6MLYDP`{`B zn^dxoelqRjbr$yBrQ3rH{4v?~ChW1U8{iuQCFn)crVRe)RKR18_OTAb{>zu-g2DWN z9p=HW$(B`MkNsQiqeN1AG=lgDd*B;XlC;OV?vB{wI!6Vt1Kv&9tAc3Cz@eXMd&nD< z;kwX&tb_7mk9MFh?trLzh+t0CV;=VD>ksxx#N3UIxjw0INIJ&vjeKdLKk& e#_2=yzVbsfBqb@))Y;8`@I+*=H)W6#)!zZBw^o|~ diff --git a/bin/bitwise.s b/bin/bitwise.s deleted file mode 100644 index 976d781..0000000 --- a/bin/bitwise.s +++ /dev/null @@ -1,4 +0,0 @@ - .globl main -main: - movl $, %eax - ret diff --git a/bin/bitwise_zero.s b/bin/bitwise_zero.s deleted file mode 100644 index 976d781..0000000 --- a/bin/bitwise_zero.s +++ /dev/null @@ -1,4 +0,0 @@ - .globl main -main: - movl $, %eax - ret diff --git a/bin/missing_const.s b/bin/missing_const.s deleted file mode 100644 index 976d781..0000000 --- a/bin/missing_const.s +++ /dev/null @@ -1,4 +0,0 @@ - .globl main -main: - movl $, %eax - ret diff --git a/bin/missing_semicolon.s b/bin/missing_semicolon.s deleted file mode 100644 index 976d781..0000000 --- a/bin/missing_semicolon.s +++ /dev/null @@ -1,4 +0,0 @@ - .globl main -main: - movl $, %eax - ret diff --git a/bin/multi_digit.s b/bin/multi_digit.s deleted file mode 100644 index bdd010e..0000000 --- a/bin/multi_digit.s +++ /dev/null @@ -1,4 +0,0 @@ - .globl main -main: - movl $100, %eax - ret diff --git a/bin/neg.s b/bin/neg.s deleted file mode 100644 index 976d781..0000000 --- a/bin/neg.s +++ /dev/null @@ -1,4 +0,0 @@ - .globl main -main: - movl $, %eax - ret diff --git a/bin/nested_missing_const.s b/bin/nested_missing_const.s deleted file mode 100644 index 976d781..0000000 --- a/bin/nested_missing_const.s +++ /dev/null @@ -1,4 +0,0 @@ - .globl main -main: - movl $, %eax - ret diff --git a/bin/nested_ops.s b/bin/nested_ops.s deleted file mode 100644 index 976d781..0000000 --- a/bin/nested_ops.s +++ /dev/null @@ -1,4 +0,0 @@ - .globl main -main: - movl $, %eax - ret diff --git a/bin/nested_ops_2.s b/bin/nested_ops_2.s deleted file mode 100644 index 976d781..0000000 --- a/bin/nested_ops_2.s +++ /dev/null @@ -1,4 +0,0 @@ - .globl main -main: - movl $, %eax - ret diff --git a/bin/newlines.s b/bin/newlines.s deleted file mode 100644 index e4eafde..0000000 --- a/bin/newlines.s +++ /dev/null @@ -1,4 +0,0 @@ - .globl main -main: - movl $0, %eax - ret diff --git a/bin/no_brace.s b/bin/no_brace.s deleted file mode 100644 index e4eafde..0000000 --- a/bin/no_brace.s +++ /dev/null @@ -1,4 +0,0 @@ - .globl main -main: - movl $0, %eax - ret diff --git a/bin/no_newlines.s b/bin/no_newlines.s deleted file mode 100644 index e4eafde..0000000 --- a/bin/no_newlines.s +++ /dev/null @@ -1,4 +0,0 @@ - .globl main -main: - movl $0, %eax - ret diff --git a/bin/no_semicolon.s b/bin/no_semicolon.s deleted file mode 100644 index e4eafde..0000000 --- a/bin/no_semicolon.s +++ /dev/null @@ -1,4 +0,0 @@ - .globl main -main: - movl $0, %eax - ret diff --git a/bin/not_five.s b/bin/not_five.s deleted file mode 100644 index 976d781..0000000 --- a/bin/not_five.s +++ /dev/null @@ -1,4 +0,0 @@ - .globl main -main: - movl $, %eax - ret diff --git a/bin/not_zero.s b/bin/not_zero.s deleted file mode 100644 index 976d781..0000000 --- a/bin/not_zero.s +++ /dev/null @@ -1,4 +0,0 @@ - .globl main -main: - movl $, %eax - ret diff --git a/bin/return_0.s b/bin/return_0.s deleted file mode 100644 index e4eafde..0000000 --- a/bin/return_0.s +++ /dev/null @@ -1,4 +0,0 @@ - .globl main -main: - movl $0, %eax - ret diff --git a/bin/return_2.s b/bin/return_2.s deleted file mode 100644 index cbfb120..0000000 --- a/bin/return_2.s +++ /dev/null @@ -1,4 +0,0 @@ - .globl main -main: - movl $2, %eax - ret diff --git a/bin/spaces.s b/bin/spaces.s deleted file mode 100644 index e4eafde..0000000 --- a/bin/spaces.s +++ /dev/null @@ -1,4 +0,0 @@ - .globl main -main: - movl $0, %eax - ret diff --git a/bin/wrong_order.s b/bin/wrong_order.s deleted file mode 100644 index a19f5ca..0000000 --- a/bin/wrong_order.s +++ /dev/null @@ -1,4 +0,0 @@ - .globl main -main: - movl $4, %eax - ret