addition and substraction added. supports multiple numbers

This commit is contained in:
2025-07-28 17:56:35 +03:00
parent 30c95ef81d
commit b3d72ffab2

39
lexer.c
View File

@@ -280,24 +280,31 @@ void main2() {
void astparser(const char* input){ void astparser(const char* input) {
TokenArr stack = tokenize_all(input); TokenArr stack = tokenize_all(input);
int sum = 0;
size_t j=0; int sign = 1;
for (size_t i = 0; i < stack.size; ++i) {
for (size_t i=0; i < stack.size; ++i){ switch (stack.unit[i].type) {
Token stack_save = stack.unit[i]; case TOKEN_PLUS:
//printf("current token: %s\nCurrent i: %d\n\n", stack_save.text, i); sign = 1;
if (stack_save.behaviour == BHV_STACK){ break;
assert(i < stack.size-1); case TOKEN_MINUS:
assert(i > 0); sign = -1;
assert(stack.unit[i+1].type == TOKEN_INTEGER); break;
assert(stack.unit[i-1].type == TOKEN_INTEGER); case TOKEN_INTEGER:
printf("%d\n", str_to_int(stack.unit[i+1].text) + str_to_int(stack.unit[i-1].text)); sum += sign * str_to_int(stack.unit[i].text);
// may switch to atoi later even here. sign = 1;
break;
default:
break;
} }
} }
printf("%d\n", sum);
for (size_t j = 0; j < stack.size; ++j) {
free(stack.unit[j].text);
}
free(stack.unit);
} }
@@ -331,7 +338,7 @@ int main4() {
int main(){ int main(){
char* input = "1+2"; char* input = "1+69+3";
printf("input: %s\n\n", input); printf("input: %s\n\n", input);
astparser(input); astparser(input);
} }