From 3e0c60f1dcf3d333cbcb2a9c6e0ca1c0a74d2d8c Mon Sep 17 00:00:00 2001 From: Anicka Bernathova Date: Thu, 3 Jul 2008 13:16:30 +0200 Subject: [PATCH] do not unget EOF --- cond.y | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) 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) -- 2.39.2