summaryrefslogtreecommitdiff
path: root/src/include/ast.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/include/ast.h')
-rw-r--r--src/include/ast.h42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/include/ast.h b/src/include/ast.h
new file mode 100644
index 0000000..f7be3d5
--- /dev/null
+++ b/src/include/ast.h
@@ -0,0 +1,42 @@
+#ifndef AST_H
+#define AST_H
+#include <stdbool.h>
+
+typedef struct AST_STRUCT {
+ enum {
+ /* complex types */
+ AST_PAIR,
+ AST_SYMBOL,
+ /* self evaluating types */
+ AST_STRING,
+ AST_BOOL,
+ AST_INT,
+ AST_FLOAT,
+ AST_FUNCTION,
+ } type;
+
+ /* For functions, the car will be a list of variables, and the cdr will be the
+ * expression */
+ struct AST_STRUCT *car;
+ struct AST_STRUCT *cdr;
+
+ char *string_value;
+ int int_value;
+ double float_value;
+ bool bool_value;
+} ast_t;
+
+ast_t *init_ast_string(char *value);
+
+ast_t *init_ast_int(int value);
+
+ast_t *init_ast_float(double value);
+
+ast_t *init_ast_pair(ast_t *car, ast_t *cdr);
+
+ast_t *init_ast_bool(bool value);
+
+ast_t *init_ast_symbol(char *value);
+
+ast_t *init_ast_function(ast_t *car, ast_t *cdr);
+#endif