From bfce18ab81c3830469e2842f206b9afe4ec7495e Mon Sep 17 00:00:00 2001 From: Jacob Date: Tue, 26 Aug 2025 16:25:20 -0400 Subject: [PATCH] Completed lambda implementation of functions. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Hooray! 🎉 --- src/grammar.y | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/grammar.y b/src/grammar.y index 4d728bf..1fea8a1 100644 --- a/src/grammar.y +++ b/src/grammar.y @@ -129,7 +129,12 @@ exp: // Number. NUM { $$ = ast_init(AST_TYPE_NUM, ast_num_data_init($1)); } - // Call. + // Variable reference. + | WORD { + $$ = ast_init(AST_TYPE_VREF, ast_vref_data_init($1)); + } + + // Call (general form). | exp GROUPS arg GROUPE { size_t argc = $3->ln; AST** argv = $3->buf; @@ -141,6 +146,18 @@ exp: )); } + // Call (convenient form). + | WORD GROUPS arg GROUPE { + size_t argc = $3->ln; + AST** argv = $3->buf; + argarr_destroypsv($3); + $$ = ast_init(AST_TYPE_CALL, ast_call_data_init( + argc, + argv, + ast_init(AST_TYPE_VREF, ast_vref_data_init($1)) + )); + } + // Function definitions. Convert to VDef of Lambda. | WORD GROUPS arg GROUPE exp { size_t parc = $3->ln; @@ -191,11 +208,6 @@ exp: $$ = ast_init(AST_TYPE_VDEF, ast_vdef_data_init($1, $3)); } - // Variable reference. - | WORD { - $$ = ast_init(AST_TYPE_VREF, ast_vref_data_init($1)); - } - | exp ADD exp { AST** argv = calloc(2, sizeof(AST*)); argv[0] = $1;