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 ba34870..0000000 Binary files a/bin/a.out and /dev/null differ 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