From: Anicka Bernathova Date: Thu, 3 Jul 2008 11:16:30 +0000 (+0200) Subject: do not unget EOF X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;h=3e0c60f1dcf3d333cbcb2a9c6e0ca1c0a74d2d8c;p=umpf.git do not unget EOF --- diff --git a/cond.y b/cond.y index 1dc42c3..cb995c6 100644 --- a/cond.y +++ b/cond.y @@ -109,6 +109,16 @@ get_string_out(char delim) return s; } +int +safe_unget(char c) +{ + if (c==EOF) + return 0; + + ungetc(c,stdin); + return 1; +} + int yylex(void) { @@ -147,39 +157,38 @@ yylex(void) else if (c == '~') return NRE; else - ungetc(c,stdin); + if (! safe_unget(c)) + return c; } if (c == '<'){ if ((c = getchar ()) == '=') return LE; - else { - ungetc(c,stdin); - return LT; - } + else + return (safe_unget(c) ? LT : c); } if (c == '>'){ if ((c = getchar ()) == '=') return GE; - else { - ungetc(c,stdin); - return GT; - } + else + return (safe_unget(c) ? GT : c); } if (c == '='){ if ((c = getchar ()) == '=') return EQ; else - ungetc(c,stdin); + if (! safe_unget(c)) + return c; } if (c == '~'){ if ((c = getchar ()) == '~') return RE; else - ungetc(c,stdin); + if (! safe_unget(c)) + return c; } if (c == EOF)