AST Improvements
This commit is contained in:
@@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +0,0 @@
|
|||||||
.globl main
|
|
||||||
main:
|
|
||||||
movl $, %eax
|
|
||||||
ret
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
.globl main
|
|
||||||
main:
|
|
||||||
movl $, %eax
|
|
||||||
ret
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
.globl main
|
|
||||||
main:
|
|
||||||
movl $, %eax
|
|
||||||
ret
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
.globl main
|
|
||||||
main:
|
|
||||||
movl $, %eax
|
|
||||||
ret
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
.globl main
|
|
||||||
main:
|
|
||||||
movl $100, %eax
|
|
||||||
ret
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
.globl main
|
|
||||||
main:
|
|
||||||
movl $, %eax
|
|
||||||
ret
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
.globl main
|
|
||||||
main:
|
|
||||||
movl $, %eax
|
|
||||||
ret
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
.globl main
|
|
||||||
main:
|
|
||||||
movl $, %eax
|
|
||||||
ret
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
.globl main
|
|
||||||
main:
|
|
||||||
movl $0, %eax
|
|
||||||
ret
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
.globl main
|
|
||||||
main:
|
|
||||||
movl $0, %eax
|
|
||||||
ret
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
.globl main
|
|
||||||
main:
|
|
||||||
movl $0, %eax
|
|
||||||
ret
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
.globl main
|
|
||||||
main:
|
|
||||||
movl $0, %eax
|
|
||||||
ret
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
.globl main
|
|
||||||
main:
|
|
||||||
movl $, %eax
|
|
||||||
ret
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
.globl main
|
|
||||||
main:
|
|
||||||
movl $, %eax
|
|
||||||
ret
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
.globl main
|
|
||||||
main:
|
|
||||||
movl $0, %eax
|
|
||||||
ret
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
.globl main
|
|
||||||
main:
|
|
||||||
movl $2, %eax
|
|
||||||
ret
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
.globl main
|
|
||||||
main:
|
|
||||||
movl $0, %eax
|
|
||||||
ret
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
.globl main
|
|
||||||
main:
|
|
||||||
movl $4, %eax
|
|
||||||
ret
|
|
||||||
Reference in New Issue
Block a user