parser: implement subexpressions with parentheses

LOL I forgot to implement this before.
This commit is contained in:
tocariimaa 2025-01-21 18:13:33 -03:00
parent db91cf09fc
commit ac6cc2154d

View file

@ -448,6 +448,8 @@ atom(ParserState *ps)
tree->ident = t.ident; tree->ident = t.ident;
} }
return tree; return tree;
case T_LPAREN:
return expr(ps, EXPR_INIT_PREC);
default: default:
parse_error(ps, "expected a number, identifier or expression, not '%s'", TokenIdStr[t.id]); parse_error(ps, "expected a number, identifier or expression, not '%s'", TokenIdStr[t.id]);
free(tree); free(tree);
@ -482,6 +484,8 @@ expr(ParserState *ps, int minprec)
Ast *tree = unary(ps); Ast *tree = unary(ps);
for (;;) { for (;;) {
LexToken t = lex_scan(ps->lexer); LexToken t = lex_scan(ps->lexer);
if (t.id == T_RPAREN)
break;
if (!token_is_binop(t.id) if (!token_is_binop(t.id)
|| t.id == T_END || t.id == T_END
|| OperatorTable[t.id].pred < minprec) { || OperatorTable[t.id].pred < minprec) {