Allow arbitrary expressions to be passed as function params.

This commit is contained in:
Stefano Sanfilippo 2014-11-25 00:39:01 +01:00
parent be3de046c3
commit 7197bd707a
4 changed files with 19 additions and 10 deletions

View File

@ -146,6 +146,9 @@ CHAR [a-zA-Z_]
"brematurata la supercazzola" {
return FUNCALL;
}
"o scherziamo"("?")? {
return FUN_END;
}
"avvertite don ulrico" {
return ABORT;
}

View File

@ -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

View File

@ -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?

View File

@ -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?