From 47c455a73c51fa0ded0a2942bed88b0953ff54f9 Mon Sep 17 00:00:00 2001 From: bronku Date: Fri, 28 Nov 2025 13:12:28 +0100 Subject: [PATCH] fuck me --- src/parser.y | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/parser.y b/src/parser.y index 3d7d87a..1cc9e15 100644 --- a/src/parser.y +++ b/src/parser.y @@ -56,6 +56,7 @@ %type > stmt %type >> args %type >> stmt_list +%type > params %% @@ -80,6 +81,10 @@ stmt: | KW_FOR IDENTIFIER KW_IN expr COLON NEWLINE INDENT stmt_list DEDENT { $$ = std::make_unique ($2, std::move($4), std::move($8)); } + | KW_DEF IDENTIFIER L_PAREN params R_PAREN COLON NEWLINE INDENT stmt_list DEDENT { + $$ = std::make_unique($2, std::move($4), std::move($9)); + } + | KW_RETURN expr NEWLINE { $$ = std::make_unique(std::move($2));} ; expr: @@ -95,6 +100,7 @@ expr: | L_PAREN expr R_PAREN {$$ = std::move($2); /* #todo: test for precedence*/} | expr L_PAREN args R_PAREN { $$ = std::make_unique(std::move($1), std::move($3));} | expr DOT IDENTIFIER { $$ = std::make_unique(std::move($1), $3);} + | L_BRACKET args R_BRACKET { $$ = std::make_unique(std::move($2));} ; args: @@ -103,6 +109,11 @@ args: $$.push_back(std::move($1)); } | args COMMA expr { $1.push_back(std::move($3)); $$ = std::move($1); } ; + +params: + { $$ = std::vector();} + | IDENTIFIER { $$ = std::vector(); $$.push_back($1); } + | params COMMA IDENTIFIER {$1.push_back($3); $$ = std::move($1);} %% namespace yy { void parser::error(const std::string& msg)