12-Sep-2013 12:05, Jacob Carlborg пишет:
On 2013-09-11 17:01, Dicebot wrote:
std.d.lexer is standard module for lexing D code, written by Brian Schott

Finally :)

* How does it handler errors, just returns TokenType.invalid?

* Personally I think the module is too big. I would go with:

- std.d.lexer.token
- std.d.lexer.tokentype

These could be one module. There is really no meaningful way to use token type separately from token.

- std.d.lexer.lexer - contains the rest
- std.d.lexer.config - IterationStyle, TokenStyle, LexerConfig

Contrary I see this break down pointless - do you really want to use config without the lexer?


- CircularRange, StringCache, possibly put somewhere else. I assume this
can be used for other things than lexing?
- Trie related code, same as above

No good public interface defined is the reason. Basically the same as with Trie in the new std.uni module - needs its own review.


* I see that errorMessage throws an exception. Do we really want that? I
would except it just returns an invalid token.

If we do decide it should throw, it should absolutely _not_ throw a
plain Exception. Create a new type, LexException or similar. I hate when
code throws plain Exceptions, it makes it useless to catch them.

I would also expect this LexException to contain a Token. It shouldn't
be needed to parse the exception message to get line and column
information.

Better yet to have a std exception hierarchy... so that all parsing modules can be tied to ParseException. So this needs to be resolved in a forward-compatible way.


--
Dmitry Olshansky

Reply via email to