you're right, that's wrong. but the question is do
you really want that to work?
in that case, one could always remove the goto ncu
on line 757.
however, for better or worse, octal constants start with a 0.
08.7 feels like a syntax error to me. i am a little
suprised that gcc accepts 08.7. are you sure that that's
actually in the standard?
this testcase should do:
double d = 08.7;
- erik
On Sun Feb 18 15:26:26 EST 2007, [EMAIL PROTECTED] wrote:
> cpu% cat t.c
> void foo (void)
> {
> double d;
> d = 08.7;
> USED(d);
> }
> cpu% 8c t.c
> t.c:4 syntax error, last name: 8.7
> cpu%
>
> This came up as I’m making my lexer for C able to scan numbers. I
> tried to understand ken’s code, but it gets very hairy right around
> /sys/src/cmd/cc/lex.c:751 — and I think there’s a bug. Or, at least,
> an undocumented departure from the ANSI standard; Harbison & Steele
> (5E) suggest that “08.7” is a valid floating point constant.
>
> As far as my lexer is concerned (http://www.tip9ug.jp/who/chesky/comp/lex.c,
> if anyone cares), it’s using line-at-a-time buffering courtesy of
> Brdstr(2), so I’m back to thinking that regcomp(2) + strtod(2) et al.
> is the way to go. It won’t handle hex floats, but who cares?
>
> --Joel