diff --git a/parse.c b/parse.c index e869c96ebece8da94221e5819d8362d721e957be..f5c8498d79901a56a486925d2f4c5da7a7309ed9 100644 --- a/parse.c +++ b/parse.c @@ -91,8 +91,13 @@ static Node *compound_stmt(Token **rest, Token *tok) { return node; } -// expr-stmt = expr ";" +// expr-stmt = expr? ";" static Node *expr_stmt(Token **rest, Token *tok) { + if (equal(tok, ";")) { + *rest = tok->next; + return new_node(ND_BLOCK); + } + Node *node = new_unary(ND_EXPR_STMT, expr(&tok, tok)); *rest = skip(tok, ";"); return node; diff --git a/test.sh b/test.sh index c4c2e67b0543cd5e90624e5d1681f9adfae007c1..34ce00cf5ff35041f1eece2a8259715a3814d418 100755 --- a/test.sh +++ b/test.sh @@ -60,5 +60,6 @@ assert 2 '{ 1; return 2; 3; }' assert 3 '{ 1; 2; return 3; }' assert 3 '{ {1; {2;} return 3;} }' +assert 5 '{ ;;; return 5; }' echo OK