Rework grammar to support input files without a newline in the end
This commit is contained in:
parent
ae01f53d15
commit
29c936c19c
1 changed files with 13 additions and 3 deletions
|
|
@ -163,6 +163,7 @@ template <typename T>
|
||||||
%precedence lbracket
|
%precedence lbracket
|
||||||
|
|
||||||
%type <indented_statement_list> indented_statement_list
|
%type <indented_statement_list> indented_statement_list
|
||||||
|
%type <indented_statement> statement_line
|
||||||
%type <std::size_t> indentation
|
%type <std::size_t> indentation
|
||||||
%type <ast::statement> statement
|
%type <ast::statement> statement
|
||||||
%type <std::vector<ast::function_declaration::argument>> function_declaration_argument_list
|
%type <std::vector<ast::function_declaration::argument>> function_declaration_argument_list
|
||||||
|
|
@ -189,9 +190,18 @@ module
|
||||||
;
|
;
|
||||||
|
|
||||||
indented_statement_list
|
indented_statement_list
|
||||||
: indented_statement_list indentation statement optional_comment newline { auto tmp = $1; tmp.statements.push_back({$2, std::make_unique<ast::statement>($3)}); $$ = std::move(tmp); }
|
: statement_line { indented_statement_list tmp; tmp.statements.push_back(std::move($1)); $$ = std::move(tmp); }
|
||||||
| indented_statement_list indentation optional_comment newline { $$ = $1; }
|
| empty_line { $$ = {}; }
|
||||||
| %empty { $$ = {}; }
|
| 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<ast::statement>($2)}; }
|
||||||
|
;
|
||||||
|
|
||||||
|
empty_line
|
||||||
|
: indentation optional_comment
|
||||||
;
|
;
|
||||||
|
|
||||||
indentation
|
indentation
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue