author | Alan Dipert
<alan@dipert.org> 2024-01-05 19:49:27 UTC |
committer | Alan Dipert
<alan@dipert.org> 2024-01-05 19:49:27 UTC |
parent | 490ac39b77194334fbd4000c180e0e19b23937a4 |
ast.h | +5 | -0 |
bbasic.l | +5 | -1 |
bbasic.y | +5 | -1 |
main.c | +7 | -3 |
diff --git a/ast.h b/ast.h index 1eb8786..3f075e0 100644 --- a/ast.h +++ b/ast.h @@ -8,6 +8,11 @@ enum TYPE_NODE { NODE_SUBTRACT, NODE_MULTIPLY, NODE_DIVIDE, + NODE_LT, + NODE_LTE, + NODE_GT, + NODE_GTE, + NODE_EQ, NODE_NUMBER_INTEGER, NODE_STRING, NODE_ID diff --git a/bbasic.l b/bbasic.l index 3423c5f..b8375ba 100644 --- a/bbasic.l +++ b/bbasic.l @@ -12,7 +12,11 @@ "if" return IF; "then" return THEN; "goto" return GOTO; -"=" return EQUALS; +"<" return LT; +"<=" return LTE; +">" return GT; +">=" return GTE; +"==" return EQ; [0-9]+ { yylval.num_int = atoi(yytext); return NUMBER_INTEGER; } [a-zA-Z][a-zA-Z0-9]* { yylval.id = strdup(yytext); return IDENTIFIER; } \"([^\\\"]|\\.)*\" { yylval.str = strdup(yytext); return STRING; } diff --git a/bbasic.y b/bbasic.y index 7c104a8..b9123b0 100644 --- a/bbasic.y +++ b/bbasic.y @@ -21,7 +21,7 @@ void yyerror(const char *s) { %token <num_int> NUMBER_INTEGER %token <id> IDENTIFIER %token <str> STRING -%token PRINT IF THEN GOTO EQUALS +%token PRINT IF THEN GOTO LT LTE GT GTE EQ %type <node> expression @@ -50,5 +50,9 @@ expression: | expression '-' expression | expression '*' expression | expression '/' expression + | expression LT expression + | expression LTE expression + | expression GT expression + | expression GTE expression ; %% diff --git a/main.c b/main.c index 5acd07f..6633c0f 100644 --- a/main.c +++ b/main.c @@ -4,7 +4,11 @@ extern int yyparse(); int main() { - printf("Welcome to Buckaroo Basic!\n"); - yyparse(); // Start parsing - return 0; + printf("Welcome to Buckaroo Basic!\n"); + while (1) { + if(!yyparse()) { + printf("It parsed :-)\n"); + } + } + return 0; }