summaryrefslogtreecommitdiff
path: root/tnslc/ast/tree.tnsl
diff options
context:
space:
mode:
authorKyle Gunger <kgunger12@gmail.com>2022-05-02 02:57:49 -0400
committerKyle Gunger <kgunger12@gmail.com>2022-05-02 02:57:49 -0400
commit46aa6b65376ea62deb1d5ea1611b59dc222a5141 (patch)
treee92b26bc2d2653b9009a230ee1d6b7ed1185e3a0 /tnslc/ast/tree.tnsl
parent9478e157ec2cfe4de704b3bd78b07aee8824774f (diff)
[TNSLC] AST Updates
- Change how string_equate works - Call AST Node generator from main - Flush out ast.tnsl - Add a few initial methods to AST - Move some code from token.tnsl to parse.tnsl
Diffstat (limited to 'tnslc/ast/tree.tnsl')
-rw-r--r--tnslc/ast/tree.tnsl52
1 files changed, 52 insertions, 0 deletions
diff --git a/tnslc/ast/tree.tnsl b/tnslc/ast/tree.tnsl
new file mode 100644
index 0000000..fe6baab
--- /dev/null
+++ b/tnslc/ast/tree.tnsl
@@ -0,0 +1,52 @@
+/##
+ Copyright 2021 Kyle Gunger
+
+ This file is licensed under the CDDL 1.0 (the License)
+ and may only be used in accordance with the License.
+ You should have received a copy of the License with this
+ software/source code. If you did not, a copy can be found
+ at the following URL:
+
+ https://opensource.org/licenses/CDDL-1.0
+
+ THIS SOFTWARE/SOURCE CODE IS PROVIDED "AS IS" WITH NO
+ WARRANTY, GUARANTEE, OR CLAIM OF FITNESS FOR ANY PURPOSE
+ EXPRESS OR IMPLIED
+#/
+
+/; make_null_node [Node]
+ ;{}charp null_str = ""
+ ;Token null_tok = {0, 0, 0, ~null_str}
+ ;{}Node sub = {}
+ ;return {null_tok, ~sub}
+;/
+
+/#
+ # This should be the main entry point into the AST module
+ #
+#; make_tree (~{}Token tokens, {}charp name) [Node]
+ ;Token root = {0, 0, NODE_TYPE.FILE, ~name}
+ ;{}Node sub = {}
+
+ /; loop (int i = 0; i < len tokens`) [i++]
+ ;{}charp to_check = tokens`{i}.data`
+
+ /; if (string_equate(to_check, ";"))
+ ;sub.append(tree_statement(tokens, ~i))
+
+ ;; else if (string_equate(to_check, ":"))
+ ;sub.append(tree_preproc(tokens, ~i))
+
+ ;; else if (string_equate(to_check, "/;"))
+ ;sub.append(tree_block(tokens, ~i))
+
+ ;; else if (string_equate(to_check, "/:"))
+ ;sub.append(tree_preblock(tokens, ~i))
+
+ ;; else
+ ;break
+ ;/
+ ;/
+
+ ;return {root, ~sub}
+;/