diff options
author | Bad Diode <bd@badd10de.dev> | 2022-03-30 16:17:45 +0200 |
---|---|---|
committer | Bad Diode <bd@badd10de.dev> | 2022-03-30 16:17:45 +0200 |
commit | f585af63190b3eb5a3337fb1667da72c7f5b5eca (patch) | |
tree | 02b5ebc34d24a6492e9900f2981a993f23aefc38 /src/parser.c | |
parent | 5fc604279a9fb156dd3a8ade7bdf5c0936e9f9a7 (diff) | |
download | bdl-f585af63190b3eb5a3337fb1667da72c7f5b5eca.tar.gz bdl-f585af63190b3eb5a3337fb1667da72c7f5b5eca.zip |
Add support for logic builtins and bools
Diffstat (limited to 'src/parser.c')
-rw-r--r-- | src/parser.c | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/src/parser.c b/src/parser.c index 2a5e3e3..9703061 100644 --- a/src/parser.c +++ b/src/parser.c | |||
@@ -108,6 +108,14 @@ parse_string(Parser *parser) { | |||
108 | } | 108 | } |
109 | 109 | ||
110 | Node * | 110 | Node * |
111 | parse_bool(Parser *parser) { | ||
112 | Token tok = next_token(parser); | ||
113 | Node *node = alloc_node(NODE_BOOL); | ||
114 | node->boolean = tok.type == TOKEN_TRUE; | ||
115 | return node; | ||
116 | } | ||
117 | |||
118 | Node * | ||
111 | parse_builtin(Parser *parser) { | 119 | parse_builtin(Parser *parser) { |
112 | Token op = next_token(parser); | 120 | Token op = next_token(parser); |
113 | Node *node = alloc_node(NODE_BUILTIN); | 121 | Node *node = alloc_node(NODE_BUILTIN); |
@@ -139,7 +147,10 @@ parse_paren(Parser *parser) { | |||
139 | case TOKEN_SUB: | 147 | case TOKEN_SUB: |
140 | case TOKEN_MUL: | 148 | case TOKEN_MUL: |
141 | case TOKEN_DIV: | 149 | case TOKEN_DIV: |
142 | case TOKEN_MOD: { | 150 | case TOKEN_MOD: |
151 | case TOKEN_NOT: | ||
152 | case TOKEN_AND: | ||
153 | case TOKEN_OR: { | ||
143 | return parse_builtin(parser); | 154 | return parse_builtin(parser); |
144 | } break; | 155 | } break; |
145 | default: break; | 156 | default: break; |
@@ -159,6 +170,10 @@ parse_next(Parser *parser) { | |||
159 | case TOKEN_STRING: { | 170 | case TOKEN_STRING: { |
160 | return parse_string(parser); | 171 | return parse_string(parser); |
161 | } break; | 172 | } break; |
173 | case TOKEN_TRUE: | ||
174 | case TOKEN_FALSE: { | ||
175 | return parse_bool(parser); | ||
176 | } break; | ||
162 | case TOKEN_LPAREN: { | 177 | case TOKEN_LPAREN: { |
163 | return parse_paren(parser); | 178 | return parse_paren(parser); |
164 | } break; | 179 | } break; |
@@ -188,6 +203,13 @@ print_node(Node *node) { | |||
188 | case NODE_STRING: { | 203 | case NODE_STRING: { |
189 | sv_write(&node->string); | 204 | sv_write(&node->string); |
190 | } break; | 205 | } break; |
206 | case NODE_BOOL: { | ||
207 | if (node->boolean) { | ||
208 | printf("true"); | ||
209 | } else { | ||
210 | printf("false"); | ||
211 | } | ||
212 | } break; | ||
191 | case NODE_BUILTIN: { | 213 | case NODE_BUILTIN: { |
192 | printf("("); | 214 | printf("("); |
193 | printf("{#%s}", token_str[node->builtin.type]); | 215 | printf("{#%s}", token_str[node->builtin.type]); |