summaryrefslogtreecommitdiff
path: root/tnslc/ast/statement.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/statement.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/statement.tnsl')
-rw-r--r--tnslc/ast/statement.tnsl48
1 files changed, 48 insertions, 0 deletions
diff --git a/tnslc/ast/statement.tnsl b/tnslc/ast/statement.tnsl
new file mode 100644
index 0000000..d8b4877
--- /dev/null
+++ b/tnslc/ast/statement.tnsl
@@ -0,0 +1,48 @@
+/##
+ 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
+#/
+
+/; is_keyword_statement ({}charp word) [bool]
+ ;return string_equate(word, "struct") || string_equate(word, "interface") || string_equate(word, "enum") ||
+ string_equate(word, "continue") || string_equate(word, "break") || string_equate(word, "label") ||
+ string_equate(word, "goto") || string_equate(word, "virtual") || string_equate(word, "asm") ||
+ string_equate(word, "delete")
+;/
+
+/; is_definition (~{}Token tokens, ~int i) [bool] ;/
+
+/; tree_keyword_statement (~{}Token tokens, ~int i) [Node]
+
+;/
+
+/; tree_statement (~{}Token tokens, ~int i) [Node]
+ ;i`++
+ /; if (i` !< len tokens`)
+ ;return make_null_node()
+
+ ;; else if (is_keyword_statement(tokens`{i`}.data`))
+ ;return tree_keyword_statement(tokens, i)
+
+ ;; else if (is_definition(tokens, i))
+ ;return tree_definition(tokens, i)
+
+ ;/
+
+ ;return tree_value(tokens, i)
+;/
+
+/; tree_preproc [Node]
+
+;/ \ No newline at end of file