From 8367d5dd543a96f32fee853d710ad8449d24a9cd Mon Sep 17 00:00:00 2001 From: Eatswap Date: Tue, 13 Dec 2022 17:02:57 +0800 Subject: [PATCH] fix: introduce return-from --- DragonLisp.l | 6 ++++++ DragonLisp.y | 2 ++ token.h | 2 ++ 3 files changed, 10 insertions(+) diff --git a/DragonLisp.l b/DragonLisp.l index 00a50f7..213a244 100644 --- a/DragonLisp.l +++ b/DragonLisp.l @@ -60,6 +60,7 @@ aref [aA][rR][eE][fF] t [tT] nil [nN][iI][lL] return [rR][eE][tT][uU][rR][nN] +returnfrom [rR][eE][tT][uU][rR][nN][-][fF][rR][oO][mM] makearray [mM][aA][kK][eE][-][aA][rR][rR][aA][yY] defconstant [dD][eE][fF][cC][oO][nN][sS][tT][aA][nN][tT] @@ -333,6 +334,11 @@ defconstant [dD][eE][fF][cC][oO][nN][sS][tT][aA][nN][tT] return token::TOKEN_RETURN; }; +{returnfrom} { + std::printf("Scanned returnfrom\n"); + return token::TOKEN_RETURN_FROM; +}; + {makearray} { std::printf("Scanned makearray\n"); return token::TOKEN_MAKE_ARRAY; diff --git a/DragonLisp.y b/DragonLisp.y index b6d2f79..e6f2b1e 100644 --- a/DragonLisp.y +++ b/DragonLisp.y @@ -88,6 +88,7 @@ namespace DragonLisp { T "t" NIL "nil" RETURN "return" + RETURN_FROM "return-from" MAKE_ARRAY "make-array" DEFCONSTANT "defconstant" ; @@ -159,6 +160,7 @@ array-ref return-expr : LPAREN RETURN R-Value RPAREN { std::printf("Parsed return-expr -> ( RETURN R-Value )\n"); $$ = drv.constructReturnAST($3); } + | LPAREN RETURN_FROM IDENTIFIER R-Value RPAREN { std::printf("Parsed return-expr -> ( RETURN_FROM IDENTIFIER R-Value )\n"); $$ = drv.constructReturnAST($4, $3); } ; func-body-expr diff --git a/token.h b/token.h index 9793721..e13e018 100644 --- a/token.h +++ b/token.h @@ -50,6 +50,8 @@ enum Token { DOLIST, DO, AREF, + RETURN, + RETURN_FROM, MAKE_ARRAY, DEFCONSTANT, };