Resolved conflicts, you no longer need to wrap constants in const()
This commit is contained in:
parent
1aa5cf1c61
commit
2575593e0f
1 changed files with 27 additions and 7 deletions
|
@ -22,6 +22,7 @@ CF_DECLS
|
|||
CF_KEYWORDS(FUNCTION, FILTER, PRINTDEBUG, INT, PRINT, CONST, VAR, PUTS, DIE, IF)
|
||||
|
||||
%type <x> term
|
||||
%type <x> block
|
||||
%type <x> cmds
|
||||
|
||||
CF_GRAMMAR
|
||||
|
@ -65,6 +66,15 @@ cmds:
|
|||
}
|
||||
;
|
||||
|
||||
block:
|
||||
term ';' {
|
||||
$$=$1;
|
||||
}
|
||||
| '{' cmds '}' {
|
||||
$$=$2;
|
||||
}
|
||||
;
|
||||
|
||||
term:
|
||||
/* EMPTY */ {
|
||||
$$ = NULL;
|
||||
|
@ -75,13 +85,7 @@ term:
|
|||
$$->arg1 = $1;
|
||||
$$->arg2 = $3;
|
||||
}
|
||||
| IF '(' term ')' '{' cmds '}' {
|
||||
$$ = f_new_inst();
|
||||
$$->code = '?';
|
||||
$$->arg1 = $3;
|
||||
$$->arg2 = $6;
|
||||
}
|
||||
| IF '(' term ')' term {
|
||||
| IF '(' term ')' block {
|
||||
$$ = f_new_inst();
|
||||
$$->code = '?';
|
||||
$$->arg1 = $3;
|
||||
|
@ -93,6 +97,17 @@ term:
|
|||
printf( "New variable\n" );
|
||||
$$ = NULL;
|
||||
}
|
||||
| SYM {
|
||||
$$ = f_new_inst();
|
||||
switch ($1->class) {
|
||||
case SYM_VARIABLE_INT:
|
||||
$$->code = 'i';
|
||||
$$->arg1 = &($1->aux);
|
||||
break;
|
||||
default:
|
||||
cf_error("Can not use this class of symbol as variable" );
|
||||
}
|
||||
}
|
||||
| VAR '(' SYM ')' {
|
||||
$$ = f_new_inst();
|
||||
switch ($3->class) {
|
||||
|
@ -104,6 +119,11 @@ term:
|
|||
cf_error("Can not use this class of symbol as variable" );
|
||||
}
|
||||
}
|
||||
| NUM {
|
||||
$$ = f_new_inst();
|
||||
$$->code = 'c';
|
||||
$$->arg1 = $1
|
||||
}
|
||||
| CONST '(' expr ')' {
|
||||
$$ = f_new_inst();
|
||||
$$->code = 'c';
|
||||
|
|
Loading…
Reference in a new issue