diff --git a/Monicelli.ll b/Monicelli.ll index 726e38a..759a324 100644 --- a/Monicelli.ll +++ b/Monicelli.ll @@ -146,6 +146,9 @@ CHAR [a-zA-Z_] "brematurata la supercazzola" { return FUNCALL; } +"o scherziamo"("?")? { + return FUN_END; +} "avvertite don ulrico" { return ABORT; } diff --git a/Monicelli.y b/Monicelli.y index c92448d..547cfb8 100644 --- a/Monicelli.y +++ b/Monicelli.y @@ -26,7 +26,7 @@ extern int yylex(); %token LOOP_BEGIN LOOP_CONDITION %token BRANCH_CONDITION BRANCH_BEGIN BRANCH_ELSE BRANCH_END CASE_END %token COLON COMMA -%token FUNDECL PARAMS FUNCALL +%token FUNDECL PARAMS FUNCALL FUN_END %token ABORT %token ID NUMBER FLOAT @@ -66,11 +66,11 @@ main: MAIN statements ; statements: - /* epsilon */ | statements statement COMMA | statements assert_stmt + /* epsilon */ | statement COMMA statements | assert_stmt statements | fun_call statements ; statement: var_decl | assign_stmt | print_stmt | input_stmt | return_stmt | - loop_stmt | branch_stmt | fun_call | abort_stmt | /* epsilon */ + loop_stmt | branch_stmt | abort_stmt | /* epsilon */ ; var_decl: VARDECL variable COMMA pointer TYPENAME var_init @@ -118,7 +118,13 @@ case_stmt: semi_expression COLON statements ; fun_call: - FUNCALL ID args + FUNCALL ID call_args FUN_END +; +call_args: + /* epsilon */ | PARAMS call_arglist +; +call_arglist: + expression | expression COMMA call_arglist ; abort_stmt: ABORT diff --git a/example.beauty.mc b/example.beauty.mc index 122fa65..1d0c7fa 100644 --- a/example.beauty.mc +++ b/example.beauty.mc @@ -29,15 +29,15 @@ Lei ha clacsonato, vicesindaco a posterdati, mi porga il vicesindaco, - brematurata la supercazzola tombale con alfio serio, + brematurata la supercazzola tombale con alfio, serio o scherziamo? avvertite don ulrico, ho visto la signora! - vicesindaco come se fosse brematurata la supercazzola avanti con il vicesindaco, + vicesindaco come se fosse brematurata la supercazzola avanti con il vicesindaco o scherziamo, vaffanzum, -blinda la supercazzola antanizzata con alfio, +blinda la supercazzola antanizzata con alfio o scherziamo? vaffanzum alfio meno 2, bituma al finale? diff --git a/example.mc b/example.mc index cf9b301..cc78e65 100644 --- a/example.mc +++ b/example.mc @@ -8,7 +8,7 @@ mi porga il cappellano, zingarata come fosse cappellano più uno, zingarata a posterdati, o magari maggiore di mobiletto: genio a posterdati, o tarapia tapioco: mi porga il cappello, e velocità di esecuzione, vicesindaco a posterdati, mi porga il vicesindaco, brematurata la supercazzola -tombale con alfio serio, avvertite don ulrico, ho visto la signora! -vicesindaco come se fosse brematurata la supercazzola avanti con il vicesindaco, -vaffanzum, blinda la supercazzola antanizzata con alfio, +tombale con alfio, serio o scherziamo? avvertite don ulrico, ho visto la signora! +vicesindaco come se fosse brematurata la supercazzola avanti con il vicesindaco +o scherziamo, vaffanzum, blinda la supercazzola antanizzata con alfio o scherziamo? vaffanzum alfio meno 2, bituma al finale?