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" { "brematurata la supercazzola" {
return FUNCALL; return FUNCALL;
} }
"o scherziamo"("?")? {
return FUN_END;
}
"avvertite don ulrico" { "avvertite don ulrico" {
return ABORT; return ABORT;
} }

View File

@ -26,7 +26,7 @@ extern int yylex();
%token LOOP_BEGIN LOOP_CONDITION %token LOOP_BEGIN LOOP_CONDITION
%token BRANCH_CONDITION BRANCH_BEGIN BRANCH_ELSE BRANCH_END CASE_END %token BRANCH_CONDITION BRANCH_BEGIN BRANCH_ELSE BRANCH_END CASE_END
%token COLON COMMA %token COLON COMMA
%token FUNDECL PARAMS FUNCALL %token FUNDECL PARAMS FUNCALL FUN_END
%token ABORT %token ABORT
%token ID NUMBER FLOAT %token ID NUMBER FLOAT
@ -66,11 +66,11 @@ main:
MAIN statements MAIN statements
; ;
statements: statements:
/* epsilon */ | statements statement COMMA | statements assert_stmt /* epsilon */ | statement COMMA statements | assert_stmt statements | fun_call statements
; ;
statement: statement:
var_decl | assign_stmt | print_stmt | input_stmt | return_stmt | 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: var_decl:
VARDECL variable COMMA pointer TYPENAME var_init VARDECL variable COMMA pointer TYPENAME var_init
@ -118,7 +118,13 @@ case_stmt:
semi_expression COLON statements semi_expression COLON statements
; ;
fun_call: 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_stmt:
ABORT ABORT

View File

@ -29,15 +29,15 @@ Lei ha clacsonato,
vicesindaco a posterdati, vicesindaco a posterdati,
mi porga il vicesindaco, mi porga il vicesindaco,
brematurata la supercazzola tombale con alfio serio, brematurata la supercazzola tombale con alfio, serio o scherziamo?
avvertite don ulrico, avvertite don ulrico,
ho visto la signora! 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, vaffanzum,
blinda la supercazzola antanizzata con alfio, blinda la supercazzola antanizzata con alfio o scherziamo?
vaffanzum alfio meno 2, vaffanzum alfio meno 2,
bituma al finale? 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, a posterdati, o magari maggiore di mobiletto: genio a posterdati,
o tarapia tapioco: mi porga il cappello, e velocità di esecuzione, o tarapia tapioco: mi porga il cappello, e velocità di esecuzione,
vicesindaco a posterdati, mi porga il vicesindaco, brematurata la supercazzola vicesindaco a posterdati, mi porga il vicesindaco, brematurata la supercazzola
tombale con alfio serio, avvertite don ulrico, ho visto la signora! 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
vaffanzum, blinda la supercazzola antanizzata con alfio, o scherziamo, vaffanzum, blinda la supercazzola antanizzata con alfio o scherziamo?
vaffanzum alfio meno 2, bituma al finale? vaffanzum alfio meno 2, bituma al finale?