aboutsummaryrefslogtreecommitdiffstats
path: root/src/parser.c
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2022-03-30 16:17:45 +0200
committerBad Diode <bd@badd10de.dev>2022-03-30 16:17:45 +0200
commitf585af63190b3eb5a3337fb1667da72c7f5b5eca (patch)
tree02b5ebc34d24a6492e9900f2981a993f23aefc38 /src/parser.c
parent5fc604279a9fb156dd3a8ade7bdf5c0936e9f9a7 (diff)
downloadbdl-f585af63190b3eb5a3337fb1667da72c7f5b5eca.tar.gz
bdl-f585af63190b3eb5a3337fb1667da72c7f5b5eca.zip
Add support for logic builtins and bools
Diffstat (limited to 'src/parser.c')
-rw-r--r--src/parser.c24
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
110Node * 110Node *
111parse_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
118Node *
111parse_builtin(Parser *parser) { 119parse_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]);