Lexer in D

Dmitry Olshansky dmitry.olsh at gmail.com
Sat Mar 2 10:21:30 PST 2013


02-Mar-2013 22:15, Dmitry Olshansky пишет:
> 02-Mar-2013 22:09, Namespace пишет:
>>> No-no and no.
>>>
>>> Just translate list of keywords/types to a bunch of switch-cases that
>>> will give you near optimal performance. Use CTFE to construct that
>>> string of D code.
>>> In fact I proposed to do just 2 levels of switches: first switch by
>>> length then by first char.
>>
>> I don't understand.
>> You don't mean something like:
>>
>> switch (value) {
>> case "if": isKeyword = true; break;
>> ...
>>
>> right?
>
> No.
> switch(value.length)
> case 2:
>      switch(value[0])
>      {
>      case 'i':
>          switch(value[1]){
>          case 'f':
>              return value.length == 2;

return true;

I edited the post to include length switch before per-char switch.

>          case ...
>      ...
>      }
> ...
> case 3:
> ...
> }
>



-- 
Dmitry Olshansky


More information about the Digitalmars-d-learn mailing list