0
0
mirror of https://gitlab.nic.cz/labs/bird.git synced 2024-12-22 09:41:54 +00:00

Original expr' is back, filter expressions renamed to term'.

In the future, we'll allow any filter term in place of `expr' and we'll
just evaluate it immediately, but not now as we have no evaluation
routines.
This commit is contained in:
Martin Mares 1999-01-15 18:04:28 +00:00
parent 3169cf6991
commit c9b6670608
2 changed files with 17 additions and 17 deletions

View File

@ -1,7 +1,7 @@
/* /*
* BIRD -- Configuration Parser Top * BIRD -- Configuration Parser Top
* *
* (c) 1998 Martin Mares <mj@ucw.cz> * (c) 1998--1999 Martin Mares <mj@ucw.cz>
* *
* Can be freely distributed and used under the terms of the GNU GPL. * Can be freely distributed and used under the terms of the GNU GPL.
*/ */
@ -34,7 +34,7 @@ CF_DECLS
%token <s> SYM %token <s> SYM
%token <t> TEXT %token <t> TEXT
%type <i> cexpr bool pxlen %type <i> expr bool pxlen
%left '+' '-' %left '+' '-'
%left '*' '/' '%' %left '*' '/' '%'
@ -59,20 +59,20 @@ CF_ADDTO(conf, /* EMPTY */)
/* Constant expressions */ /* Constant expressions */
cexpr: expr:
NUM NUM
| cexpr '+' cexpr { $$ = $1 + $3; } | expr '+' expr { $$ = $1 + $3; }
| cexpr '-' cexpr { $$ = $1 - $3; } | expr '-' expr { $$ = $1 - $3; }
| cexpr '*' cexpr { $$ = $1 * $3; } | expr '*' expr { $$ = $1 * $3; }
| cexpr '/' cexpr { if ($3) $$ = $1 / $3; else cf_error("Division by zero"); } | expr '/' expr { if ($3) $$ = $1 / $3; else cf_error("Division by zero"); }
| cexpr '%' cexpr { if ($3) $$ = $1 % $3; else cf_error("Division by zero"); } | expr '%' expr { if ($3) $$ = $1 % $3; else cf_error("Division by zero"); }
| '(' cexpr ')' { $$ = $2; } | '(' expr ')' { $$ = $2; }
| SYM { if ($1->class != SYM_NUMBER) cf_error("Number expected"); else $$ = $1->aux; } | SYM { if ($1->class != SYM_NUMBER) cf_error("Number expected"); else $$ = $1->aux; }
; ;
CF_ADDTO(conf, definition) CF_ADDTO(conf, definition)
definition: definition:
DEFINE SYM '=' cexpr { DEFINE SYM '=' expr {
if ($2->class != SYM_VOID) cf_error("Symbol already defined"); if ($2->class != SYM_VOID) cf_error("Symbol already defined");
$2->class = SYM_NUMBER; $2->class = SYM_NUMBER;
$2->aux = $4; $2->aux = $4;
@ -82,7 +82,7 @@ definition:
/* Switches */ /* Switches */
bool: bool:
cexpr {$$ = !!$1; } expr {$$ = !!$1; }
| ON { $$ = 1; } | ON { $$ = 1; }
| YES { $$ = 1; } | YES { $$ = 1; }
| OFF { $$ = 0; } | OFF { $$ = 0; }

View File

@ -21,7 +21,7 @@ CF_DECLS
CF_KEYWORDS(FUNCTION, FILTER, PRINTDEBUG, INT, PRINT) CF_KEYWORDS(FUNCTION, FILTER, PRINTDEBUG, INT, PRINT)
%type <x> expr %type <x> term
CF_GRAMMAR CF_GRAMMAR
@ -38,7 +38,7 @@ program: /* EMPTY */
CF_ADDTO(conf, function) CF_ADDTO(conf, function)
function: function:
FUNCTION SYM '(' ')' '{' expr '}' { FUNCTION SYM '(' ')' '{' term '}' {
extern struct f_instruction *last_func; extern struct f_instruction *last_func;
if ($2->class != SYM_VOID) cf_error("Symbol already defined" ); if ($2->class != SYM_VOID) cf_error("Symbol already defined" );
$2->class = SYM_FUNCTION; $2->class = SYM_FUNCTION;
@ -50,7 +50,7 @@ function:
CF_ADDTO(conf, filter) CF_ADDTO(conf, filter)
filter: filter:
FILTER SYM '{' expr '}' { FILTER SYM '{' term '}' {
if ($2->class != SYM_VOID) cf_error("Symbol already defined" ); if ($2->class != SYM_VOID) cf_error("Symbol already defined" );
$2->class = SYM_FILTER; $2->class = SYM_FILTER;
$2->aux = $4; $2->aux = $4;
@ -60,8 +60,8 @@ filter:
/* Programs */ /* Programs */
expr: /* EMPTY */ { $$ = NULL; } term: /* EMPTY */ { $$ = NULL; }
| expr ';' expr { | term ';' term {
$$ = cfg_alloc(sizeof(struct f_instruction)); $$ = cfg_alloc(sizeof(struct f_instruction));
printf( "We've got statement here\n" ); printf( "We've got statement here\n" );
$$->code = ','; $$->code = ',';
@ -74,7 +74,7 @@ expr: /* EMPTY */ { $$ = NULL; }
printf( "New variable\n" ); printf( "New variable\n" );
$$ = NULL; $$ = NULL;
} }
| SYM '=' cexpr { | SYM '=' expr {
$$ = cfg_alloc(sizeof(struct f_instruction)); $$ = cfg_alloc(sizeof(struct f_instruction));
printf( "Ook, we'll set value\n" ); printf( "Ook, we'll set value\n" );
if ($1->class != SYM_VARIABLE_INT) if ($1->class != SYM_VARIABLE_INT)