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
|
||||
|
||||
%type <indented_statement_list> indented_statement_list
|
||||
%type <indented_statement> statement_line
|
||||
%type <std::size_t> indentation
|
||||
%type <ast::statement> statement
|
||||
%type <std::vector<ast::function_declaration::argument>> 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<ast::statement>($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<ast::statement>($2)}; }
|
||||
;
|
||||
|
||||
empty_line
|
||||
: indentation optional_comment
|
||||
;
|
||||
|
||||
indentation
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue