rem: while (ISDIGIT (c)); lvalp->textintval.value = sign < 0 ? -value : value; lvalp->textintval.digits = p - pc->input; pc->input = p; return sign ? tSNUMBER : tUNUMBER;
add: if ((c == '.' || c == ',') && ISDIGIT (p[1])) { time_t s; int ns; int digits; unsigned long int value1;   if (sign < 0) { s = - value; if (0 < s) return '?'; value1 = -s; } else { s = value; if (s < 0) return '?'; value1 = s; } if (value != value1) return '?';   p++; ns = *p++ - '0'; for (digits = 2; digits <= LOG10_BILLION; digits++) { ns *= 10; if (ISDIGIT (*p)) ns += *p++ - '0'; }   if (sign < 0) for (; ISDIGIT (*p); p++) if (*p != '0') { ns++; break; } while (ISDIGIT (*p)) p++;   if (sign < 0 && ns) { s--; if (! (s < 0)) return '?'; ns = BILLION - ns; }  lvalp->timespec.tv_sec = s; lvalp->timespec.tv_nsec = ns; pc->input = p; return sign ? tSDECIMAL_NUMBER : tUDECIMAL_NUMBER; } else { lvalp->textintval.negative = sign < 0; if (sign < 0) { lvalp->textintval.value = - value; if (0 < lvalp->textintval.value) return '?'; } else { lvalp->textintval.value = value; if (lvalp->textintval.value < 0) return '?'; } lvalp->textintval.digits = p - pc->input; pc->input = p; return sign ? tSNUMBER : tUNUMBER; }
context: yylex (YYSTYPE *lvalp, parser_control *pc){  unsigned char c;  int count;  for (;;)    {      while (c = *pc->input, ISSPACE (c))	pc->input++;      if (ISDIGIT (c) || c == '-' || c == '+')	{	  char const *p;	  int sign;	  int value;	  if (c == '-' || c == '+')	    {	      sign = c == '-' ? -1 : 1;	      c = *++pc->input;	      if (! ISDIGIT (c))		/* skip the '-' sign */		continue;	    }	  else	    sign = 0;	  p = pc->input;	  value = 0;	  do	    {	      value = 10 * value + c - '0';	      c = *++p;	    }	  while (ISDIGIT (c));	  lvalp->textintval.value = sign < 0 ? -value : value;	  lvalp->textintval.digits = p - pc->input;	  pc->input = p;	  return sign ? tSNUMBER : tUNUMBER;	}      if (ISALPHA (c))	{	  char buff[20];	  char *p = buff;	  table const *tp;	  do	    {	      if (p < buff + sizeof buff - 1)		*p++ = c;	      c = *++pc->input;	    }	  while (ISALPHA (c) || c == '.');	  *p = '\0';	  tp = lookup_word (pc, buff);	  if (! tp)	    return '?';	  lvalp->intval = tp->value;	  return tp->type;	}      if (c != '(')	return *pc->input++;      count = 0;      do	{	  c = *pc->input++;	  if (c == '\0')	    return c;	  if (c == '(')	    count++;	  else if (c == ')')	    count--;	}      while (count > 0);    }}