From 29c936c19c92b43fa42697b0a49514898e8595a2 Mon Sep 17 00:00:00 2001 From: lisyarus Date: Wed, 18 Mar 2026 19:03:31 +0300 Subject: [PATCH] Rework grammar to support input files without a newline in the end --- libs/parser/rules/pslang.y | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/libs/parser/rules/pslang.y b/libs/parser/rules/pslang.y index cb869c2..83fb75e 100644 --- a/libs/parser/rules/pslang.y +++ b/libs/parser/rules/pslang.y @@ -163,6 +163,7 @@ template %precedence lbracket %type indented_statement_list +%type statement_line %type indentation %type statement %type > function_declaration_argument_list @@ -189,9 +190,18 @@ module ; indented_statement_list -: indented_statement_list indentation statement optional_comment newline { auto tmp = $1; tmp.statements.push_back({$2, std::make_unique($3)}); $$ = std::move(tmp); } -| indented_statement_list indentation optional_comment newline { $$ = $1; } -| %empty { $$ = {}; } +: statement_line { indented_statement_list tmp; tmp.statements.push_back(std::move($1)); $$ = std::move(tmp); } +| empty_line { $$ = {}; } +| indented_statement_list newline statement_line { auto tmp = $1; tmp.statements.push_back(std::move($3)); $$ = std::move(tmp); } +| indented_statement_list newline empty_line { $$ = $1; } +; + +statement_line +: indentation statement optional_comment { $$ = indented_statement{$1, std::make_unique($2)}; } +; + +empty_line +: indentation optional_comment ; indentation