Starting with the lexer, i'm starting to comprehend better what pratt parsing is and how to apply it. For now just declaring basic structure and functions

This commit is contained in:
2026-03-13 07:58:38 -06:00
parent 903fdbd6ff
commit 6377515558
5 changed files with 69 additions and 4 deletions

View File

@@ -141,7 +141,7 @@ LexerErr tokenize(const char *input, ASTNodeArray *out) {
}
ASTNode new_node = {
.type = NODE_BINARY_OP,
.data.binary.op = current,
.data.binary.op = char_to_operator(current),
.data.binary.right = NULL,
.data.binary.left = NULL,
};
@@ -158,6 +158,10 @@ LexerErr tokenize(const char *input, ASTNodeArray *out) {
offset++;
}
if (arr.len < 1) {
return LEXER_EMPTY_INPUT;
}
*out = arr;
return LEXER_OK;
}
@@ -225,3 +229,22 @@ bool isoperator(int c) {
return false;
}
}
Operator char_to_operator(int c) {
switch (c) {
case '+':
return OP_ADD;
break;
case '-':
return OP_SUB;
break;
case '*':
return OP_MUL;
break;
case '/':
return OP_DIV;
break;
default: // I mean shouldn't be used, we assume
return -1;
}
}