fix: introduce return-from

This commit is contained in:
Eatswap 2022-12-13 17:02:57 +08:00
parent 81add324bb
commit 8367d5dd54
Signed by: Eatswap
GPG Key ID: BE661106A1F3FA0B
3 changed files with 10 additions and 0 deletions

View File

@ -60,6 +60,7 @@ aref [aA][rR][eE][fF]
t [tT] t [tT]
nil [nN][iI][lL] nil [nN][iI][lL]
return [rR][eE][tT][uU][rR][nN] 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] makearray [mM][aA][kK][eE][-][aA][rR][rR][aA][yY]
defconstant [dD][eE][fF][cC][oO][nN][sS][tT][aA][nN][tT] 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; return token::TOKEN_RETURN;
}; };
{returnfrom} {
std::printf("Scanned returnfrom\n");
return token::TOKEN_RETURN_FROM;
};
{makearray} { {makearray} {
std::printf("Scanned makearray\n"); std::printf("Scanned makearray\n");
return token::TOKEN_MAKE_ARRAY; return token::TOKEN_MAKE_ARRAY;

View File

@ -88,6 +88,7 @@ namespace DragonLisp {
T "t" T "t"
NIL "nil" NIL "nil"
RETURN "return" RETURN "return"
RETURN_FROM "return-from"
MAKE_ARRAY "make-array" MAKE_ARRAY "make-array"
DEFCONSTANT "defconstant" DEFCONSTANT "defconstant"
; ;
@ -159,6 +160,7 @@ array-ref
return-expr return-expr
: LPAREN RETURN R-Value RPAREN { std::printf("Parsed return-expr -> ( RETURN R-Value )\n"); $$ = drv.constructReturnAST($3); } : 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 func-body-expr

View File

@ -50,6 +50,8 @@ enum Token {
DOLIST, DOLIST,
DO, DO,
AREF, AREF,
RETURN,
RETURN_FROM,
MAKE_ARRAY, MAKE_ARRAY,
DEFCONSTANT, DEFCONSTANT,
}; };