A lexical change (a breaking change, but trivial to fix)

Timon Gehr timon.gehr at gmx.ch
Sat Jul 7 15:14:49 PDT 2012


On 07/08/2012 12:12 AM, Timon Gehr wrote:
> On 07/07/2012 11:39 PM, Mehrdad wrote:
>> This might sound silly,
>
> +1.
>
>> but how about if D stopped allowing 0..2 as a
>> range, and instead just said "invalid floating-point number"?
>>
>> Fixing it en masse would be pretty trivial... just run a regex to replace
>> "\b(\d+)\.\."
>> with
>> "\1 .. "
>> and you're good to go.
>>
>> (Or if you want more accuracy, just take the compiler output and feed it
>> back with a fix -- that would work too.)
>>
>> The benefit, though, is that now you can do maximal munch without
>> worrying about this edge case... which sure makes it easier to make a
>> lexer.
>>
>> Thoughts?
>
> It does not make it easier to create a lexer, because this is not
> actually an edge case worth explicitly testing for.
>
> switch(input.front){

I meant input[0]. No need for decoding.

>      case '0'..'9': ...
>      case 'a'..'f', 'A'..'F': ...
>      case '.': if('0'>input[1]||input[1]>'9') break;
>          ...
> }



More information about the Digitalmars-d mailing list