A lexical change (a breaking change, but trivial to fix)
Mehrdad
wfunction at hotmail.com
Sun Jul 8 00:54:46 PDT 2012
On Saturday, 7 July 2012 at 22:54:15 UTC, Timon Gehr wrote:
> On 07/08/2012 12:23 AM, Mehrdad wrote:
>
> You could go like this:
>
> switch(input.front) {
> case '0'..'9':
> bool consumedtrailingdot;
> output.put(parseNumber(input, consumedtrailingdot));
> if(!consumedtrailingdot) continue;
> if(input.front != '.') {
> output.put(Token("."));
> continue;
> }
> input.popFront();
> if(input.front != '.') {
> output.put(Token(".."));
> continue;
> }
> output.put(Token("..."));
> continue;
> }
You kinda glossed over the crucial detail in parseNumber(). ;)
What happens if it sees "2..3" ?
Then it /must/ have eaten the first period (it can't see the
second period otherwise)... in which case now you have no idea
that happened.
Of course, it's trivial to fix with an extra lookahead, but that
would require using a forward range instead of an input range.
(Which, again, is easy to do with an adapter -- what I ended up
doing -- but the point is, it makes it harder to lex the code
with just an input range.)
More information about the Digitalmars-d
mailing list