aboutsummaryrefslogtreecommitdiffstats
path: root/src/parser.h
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2021-10-30 08:16:08 +0200
committerBad Diode <bd@badd10de.dev>2021-10-30 08:16:08 +0200
commit4ebcd99d1fadac72ea58ea46012a86c5319ef7e7 (patch)
tree548d749c8fd93a3520f56de7b594d85d83fae062 /src/parser.h
parentfbddf5e0c46778c1e403389ba557ef036b7b0fb5 (diff)
downloadbdl-4ebcd99d1fadac72ea58ea46012a86c5319ef7e7.tar.gz
bdl-4ebcd99d1fadac72ea58ea46012a86c5319ef7e7.zip
Add parsing of lambda expression
Diffstat (limited to 'src/parser.h')
-rwxr-xr-xsrc/parser.h15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/parser.h b/src/parser.h
index ee5febe..17bd6d6 100755
--- a/src/parser.h
+++ b/src/parser.h
@@ -11,6 +11,7 @@ typedef enum ObjectType {
11 OBJ_TYPE_SYMBOL, 11 OBJ_TYPE_SYMBOL,
12 OBJ_TYPE_STRING, 12 OBJ_TYPE_STRING,
13 OBJ_TYPE_PAIR, 13 OBJ_TYPE_PAIR,
14 OBJ_TYPE_LAMBDA,
14} ObjectType; 15} ObjectType;
15 16
16typedef struct Object { 17typedef struct Object {
@@ -25,9 +26,15 @@ typedef struct Object {
25 26
26 // OBJ_TYPE_PAIR 27 // OBJ_TYPE_PAIR
27 struct { 28 struct {
28 struct Object *car; 29 struct Object *head;
29 struct Object *cdr; 30 struct Object *tail;
30 }; 31 };
32
33 // OBJ_TYPE_LAMBDA
34 struct {
35 struct Object **params;
36 struct Object **body;
37 };
31 }; 38 };
32 39
33 size_t line; 40 size_t line;
@@ -55,6 +62,7 @@ Object * parse_string(Token tok);
55Object * parse_bool(Token tok); 62Object * parse_bool(Token tok);
56Object * parse_fixnum(Token tok); 63Object * parse_fixnum(Token tok);
57Object * parse_list(Parser *parser, Errors *errors); 64Object * parse_list(Parser *parser, Errors *errors);
65Object * parse_lambda(Parser *parser, Errors *errors);
58Root * parse(Token *tokens, Errors *errors); 66Root * parse(Token *tokens, Errors *errors);
59 67
60// Object operations. 68// Object operations.
@@ -63,7 +71,7 @@ void object_display(Object *obj);
63// Manage resources. 71// Manage resources.
64Object * object_alloc(Token tok, ObjectType type); 72Object * object_alloc(Token tok, ObjectType type);
65void object_free(Object *node); 73void object_free(Object *node);
66void free_roots(Root *roots); 74void free_objects(void);
67 75
68// 76//
69// Helper macros. 77// Helper macros.
@@ -77,6 +85,7 @@ void free_roots(Root *roots);
77#define IS_STRING(VAL) ((VAL)->type == OBJ_TYPE_STRING) 85#define IS_STRING(VAL) ((VAL)->type == OBJ_TYPE_STRING)
78#define IS_SYMBOL(VAL) ((VAL)->type == OBJ_TYPE_SYMBOL) 86#define IS_SYMBOL(VAL) ((VAL)->type == OBJ_TYPE_SYMBOL)
79#define IS_PAIR(VAL) ((VAL)->type == OBJ_TYPE_PAIR) 87#define IS_PAIR(VAL) ((VAL)->type == OBJ_TYPE_PAIR)
88#define IS_LAMBDA(VAL) ((VAL)->type == OBJ_TYPE_LAMBDA)
80 89
81// Debug. 90// Debug.
82#define OBJ_PRINT(OBJ) object_display(OBJ); printf("\n"); 91#define OBJ_PRINT(OBJ) object_display(OBJ); printf("\n");