diff options
Diffstat (limited to 'src/parser.h')
-rwxr-xr-x | src/parser.h | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/src/parser.h b/src/parser.h index ee5febe..f438863 100755 --- a/src/parser.h +++ b/src/parser.h | |||
@@ -37,10 +37,25 @@ typedef struct Object { | |||
37 | typedef struct Parser { | 37 | typedef struct Parser { |
38 | Token *tokens; | 38 | Token *tokens; |
39 | size_t current; | 39 | size_t current; |
40 | |||
41 | // Unique symbols and strings. | ||
42 | Object **symbols; | ||
43 | Object **strings; | ||
40 | } Parser; | 44 | } Parser; |
41 | 45 | ||
42 | typedef Object* Root; | 46 | typedef Object* Root; |
43 | 47 | ||
48 | typedef struct ParserResults { | ||
49 | // All root statements. | ||
50 | Root *roots; | ||
51 | |||
52 | // Unique symbols (tracking only first occurence). | ||
53 | Object **symbols; | ||
54 | |||
55 | // Unique strings (tracking only first occurence). | ||
56 | Object **strings; | ||
57 | } ParserResults; | ||
58 | |||
44 | // Mimics the functionality in the Scanner functions, but for tokens. | 59 | // Mimics the functionality in the Scanner functions, but for tokens. |
45 | Token next_token(Parser *parser); | 60 | Token next_token(Parser *parser); |
46 | Token previous_token(Parser *parser); | 61 | Token previous_token(Parser *parser); |
@@ -50,20 +65,21 @@ bool has_next_token(const Parser *parser); | |||
50 | 65 | ||
51 | // Parsing operations. | 66 | // Parsing operations. |
52 | Object * parse_tree(Parser *parser, Errors *errors); | 67 | Object * parse_tree(Parser *parser, Errors *errors); |
53 | Object * parse_symbol(Token tok); | 68 | Object * parse_symbol(Parser *parser, Token tok); |
54 | Object * parse_string(Token tok); | 69 | Object * parse_string(Parser *parser, Token tok); |
55 | Object * parse_bool(Token tok); | 70 | Object * parse_bool(Token tok); |
56 | Object * parse_fixnum(Token tok); | 71 | Object * parse_fixnum(Token tok); |
57 | Object * parse_list(Parser *parser, Errors *errors); | 72 | Object * parse_list(Parser *parser, Errors *errors); |
58 | Root * parse(Token *tokens, Errors *errors); | 73 | ParserResults parse(Token *tokens, Errors *errors); |
59 | 74 | ||
60 | // Object operations. | 75 | // Object operations. |
61 | void object_display(Object *obj); | 76 | void object_display(Object *obj); |
77 | bool object_equal(Object *a, Object *b); | ||
62 | 78 | ||
63 | // Manage resources. | 79 | // Manage resources. |
64 | Object * object_alloc(Token tok, ObjectType type); | 80 | Object * object_alloc(Token tok, ObjectType type); |
65 | void object_free(Object *node); | 81 | void object_free(Object *node); |
66 | void free_roots(Root *roots); | 82 | void free_parser_results(ParserResults *pr); |
67 | 83 | ||
68 | // | 84 | // |
69 | // Helper macros. | 85 | // Helper macros. |