Allow other operations than +.

This commit is contained in:
Pavel Machek 2000-05-15 12:27:45 +00:00
parent f4ab231746
commit c5a06f65ee
3 changed files with 23 additions and 2 deletions

View file

@ -334,6 +334,9 @@ function_call:
term: term:
'(' term ')' { $$ = $2; } '(' term ')' { $$ = $2; }
| term '+' term { $$ = f_new_inst(); $$->code = '+'; $$->a1.p = $1; $$->a2.p = $3; } | term '+' term { $$ = f_new_inst(); $$->code = '+'; $$->a1.p = $1; $$->a2.p = $3; }
| term '-' term { $$ = f_new_inst(); $$->code = '-'; $$->a1.p = $1; $$->a2.p = $3; }
| term '*' term { $$ = f_new_inst(); $$->code = '*'; $$->a1.p = $1; $$->a2.p = $3; }
| term '/' term { $$ = f_new_inst(); $$->code = '/'; $$->a1.p = $1; $$->a2.p = $3; }
| term '=' term { $$ = f_new_inst(); $$->code = P('=','='); $$->a1.p = $1; $$->a2.p = $3; } | term '=' term { $$ = f_new_inst(); $$->code = P('=','='); $$->a1.p = $1; $$->a2.p = $3; }
| term NEQ term { $$ = f_new_inst(); $$->code = P('!','='); $$->a1.p = $1; $$->a2.p = $3; } | term NEQ term { $$ = f_new_inst(); $$->code = P('!','='); $$->a1.p = $1; $$->a2.p = $3; }
| term '<' term { $$ = f_new_inst(); $$->code = '<'; $$->a1.p = $1; $$->a2.p = $3; } | term '<' term { $$ = f_new_inst(); $$->code = '<'; $$->a1.p = $1; $$->a2.p = $3; }

View file

@ -230,6 +230,22 @@ interpret(struct f_inst *what)
default: runtime( "Usage of unknown type" ); default: runtime( "Usage of unknown type" );
} }
break; break;
case '-':
TWOARGS_C;
switch (res.type = v1.type) {
case T_VOID: runtime( "Can not operate with values of type void" );
case T_INT: res.val.i = v1.val.i - v2.val.i; break;
default: runtime( "Usage of unknown type" );
}
break;
case '*':
TWOARGS_C;
switch (res.type = v1.type) {
case T_VOID: runtime( "Can not operate with values of type void" );
case T_INT: res.val.i = v1.val.i * v2.val.i; break;
default: runtime( "Usage of unknown type" );
}
break;
case '/': case '/':
TWOARGS_C; TWOARGS_C;
switch (res.type = v1.type) { switch (res.type = v1.type) {
@ -582,6 +598,8 @@ i_same(struct f_inst *f1, struct f_inst *f2)
switch(f1->code) { switch(f1->code) {
case ',': /* fall through */ case ',': /* fall through */
case '+': case '+':
case '-':
case '*':
case '/': case '/':
case P('!','='): case P('!','='):
case P('=','='): case P('=','='):

View file

@ -6,7 +6,7 @@
router id 62.168.0.1; router id 62.168.0.1;
define xyzzy = 120+10; #define xyzzy = 120+10;
function callme(int arg1; int arg2) function callme(int arg1; int arg2)
int local1; int local1;
@ -75,7 +75,7 @@ ip p;
{ {
print "Testing filter language:"; print "Testing filter language:";
i = four; i = four;
i = 1230 + i; i = 12*100 + 60/2 + i;
i = ( i + 0 ); i = ( i + 0 );
print " arithmetics: 1234 = ", i; print " arithmetics: 1234 = ", i;
printn " if statements "; printn " if statements ";