AST Improvements

This commit is contained in:
2026-01-28 16:40:47 -05:00
parent 62dc2e1be8
commit e1548a9ff0
21 changed files with 40 additions and 79 deletions

View File

@@ -234,7 +234,7 @@ func getTestFiles() -> [TestFile] {
var testFiles: [TestFile] = [TestFile]() var testFiles: [TestFile] = [TestFile]()
let fileManager = FileManager.default let fileManager = FileManager.default
let path = "c/tests/stage_2" let path = "c/tests/stage_1"
do { do {
let validItems = try fileManager.contentsOfDirectory(atPath: path + "/valid") let validItems = try fileManager.contentsOfDirectory(atPath: path + "/valid")
@@ -301,7 +301,7 @@ func parse(lexed: [Substring]) -> String {
print("Success") print("Success")
print(abstractSyntaxTree.text()) print(abstractSyntaxTree.text())
print("Assembly:") print("Assembly:")
let assembly: String = generateOutput(tree: abstractSyntaxTree) let assembly: String = generateOutput(abstractSyntaxTree)
print(assembly) print(assembly)
return assembly return assembly
} }
@@ -310,7 +310,7 @@ func parse(lexed: [Substring]) -> String {
return "" return ""
} }
func generateOutput(tree: SyntaxTreeNode) -> String { /*func generateOutput(tree: SyntaxTreeNode) -> String {
var text: String = "" var text: String = ""
switch tree.variant { switch tree.variant {
case .Integer: case .Integer:
@@ -329,6 +329,43 @@ func generateOutput(tree: SyntaxTreeNode) -> String {
text += generateOutput(tree: child) 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 return text
} }

BIN
bin/a.out

Binary file not shown.

View File

@@ -1,4 +0,0 @@
.globl main
main:
movl $, %eax
ret

View File

@@ -1,4 +0,0 @@
.globl main
main:
movl $, %eax
ret

View File

@@ -1,4 +0,0 @@
.globl main
main:
movl $, %eax
ret

View File

@@ -1,4 +0,0 @@
.globl main
main:
movl $, %eax
ret

View File

@@ -1,4 +0,0 @@
.globl main
main:
movl $100, %eax
ret

View File

@@ -1,4 +0,0 @@
.globl main
main:
movl $, %eax
ret

View File

@@ -1,4 +0,0 @@
.globl main
main:
movl $, %eax
ret

View File

@@ -1,4 +0,0 @@
.globl main
main:
movl $, %eax
ret

View File

@@ -1,4 +0,0 @@
.globl main
main:
movl $, %eax
ret

View File

@@ -1,4 +0,0 @@
.globl main
main:
movl $0, %eax
ret

View File

@@ -1,4 +0,0 @@
.globl main
main:
movl $0, %eax
ret

View File

@@ -1,4 +0,0 @@
.globl main
main:
movl $0, %eax
ret

View File

@@ -1,4 +0,0 @@
.globl main
main:
movl $0, %eax
ret

View File

@@ -1,4 +0,0 @@
.globl main
main:
movl $, %eax
ret

View File

@@ -1,4 +0,0 @@
.globl main
main:
movl $, %eax
ret

View File

@@ -1,4 +0,0 @@
.globl main
main:
movl $0, %eax
ret

View File

@@ -1,4 +0,0 @@
.globl main
main:
movl $2, %eax
ret

View File

@@ -1,4 +0,0 @@
.globl main
main:
movl $0, %eax
ret

View File

@@ -1,4 +0,0 @@
.globl main
main:
movl $4, %eax
ret