From 99e8ed3a1c1d6006fbba382c54b19e7db2a13558 Mon Sep 17 00:00:00 2001 From: Anicka Bernathova Date: Wed, 2 Jul 2008 15:46:53 +0200 Subject: [PATCH] numbers added --- cond.y | 39 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 36 insertions(+), 3 deletions(-) diff --git a/cond.y b/cond.y index 0155cbd..962fcb0 100644 --- a/cond.y +++ b/cond.y @@ -10,11 +10,13 @@ void yyerror (char const *); %union { int b; + int n; char* str; } %token CONST -%left EQ +%token NUM +%left EQ NEQ GE LE GT LT %left '|' '&' '^' %left '!' %type boo @@ -29,8 +31,14 @@ line: '\n' | error '\n' { yyerrok; } ; -boo: CONST EQ CONST { $$ = ! strcmp($1, $3); } - | boo EQ boo { $$ = $1 == $3 } +boo: CONST EQ CONST { $$ = ! strcmp($1, $3); } + | CONST NEQ CONST { $$ = !! strcmp($1, $3); } + | NUM EQ NUM { $$ = $1 == $3 } + | NUM NEQ NUM { $$ = $1 != $3 } + | NUM GE NUM { $$ = $1 >= $3 } + | NUM LE NUM { $$ = $1 <= $3 } + | NUM GT NUM { $$ = $1 > $3 } + | NUM LT NUM { $$ = $1 < $3 } | boo '|' boo { $$ = $1 || $3 } | boo '&' boo { $$ = $1 && $3 } | boo '^' boo { $$ = ($1 || $3) && !($1 && $3) } @@ -72,6 +80,31 @@ yylex(void) return CONST; } + if (isdigit(c)){ + ungetc(c,stdin); + scanf("%d",&yylval.n); + return NUM; + } + + if (c == '!'){ + if ((c = getchar ()) == '=') + return NEQ; + } + + if (c == '<'){ + if ((c = getchar ()) == '=') + return LE; + else + return LT; + } + + if (c == '>'){ + if ((c = getchar ()) == '=') + return GE; + else + return GT; + } + if (c == '='){ if ((c = getchar ()) == '=') return EQ; -- 2.39.2