On 10/8/13 6:26 PM, Walter Bright wrote:
On 10/4/2013 5:24 PM, Andrei Alexandrescu wrote:
 [...]

Some points:

1. This is a replacement for the switch statement starting at around
line 505 in advance()

https://github.com/Hackerpilot/phobos/blob/9bdb7f97bb8021f3b0d0291896b8fe21a6fead23/std/d/lexer.d

It is not a replacement for the rest of the lexer.

2. Instead of explicit token type enums, such as:

     mod, /// %

it would just be referred to as:

     tok!"%"

Andrei pointed out to me that he has fixed the latter so it resolves to
a small integer - meaning it works efficiently as cases in switch
statements. This removes my primary objection to it.

3. This level of abstraction combined with efficient generation cannot
be currently done in any other language. Hence, it makes for a sweet
showcase of what D can do.

Hence, I think we ought to adapt Brian's lexer by replacing the switch
with Andrei's trie searcher, and replacing the enum TokenType with the
tok!"string" syntax.

Thanks, that's exactly what I had in mind. Also the trie searcher should be exposed by the library so people can implement other languages.

Let me make another, more strategic, point. Projects like Rust and Go have dozens of people getting paid to work on them. In the time it takes us to crank one conventional lexer/parser for a language, they can crank five. The answer is we can't win with a conventional approach. We must leverage D's strengths to amplify our speed of execution, and in this context an integrated generic lexer generator is the ticket.

There is one thing I neglected to mention, and I apologize for that. Coming with this all on the eve of voting must be quite demotivating for Brian, who's been through all the arduous steps to get his work to production quality. I hope the compensating factor is that the proposed change is a net positive for the greater good.


Andrei

Reply via email to