std.d.lexer requirements

Jonathan M Davis jmdavisProg at gmx.com
Tue Aug 7 01:14:16 PDT 2012


On Tuesday, August 07, 2012 08:00:24 Christophe Travert wrote:
> Walter Bright , dans le message (digitalmars.D:174360), a écrit :

> > That's why I suggested supplying a callback delegate to decide what to do
> > with errors (ignore, throw exception, or quit) and have the delegate
> > itself do that. That way, there is no customization of the Lexer
> > required.
> 
> It may be easier to take into accound few cases (return error token and
> throwing is enough, so that is a basic static if), than to define a way
> to integrate a delegate (what should be the delegate's signature, what
> value to return to query for stopping, how to provide ways to recovers,
> etc).

For the moment at least, I'm doing this

bool delegate(string errorMsg, SourcePos pos) errorHandler;

where SourcePos is a struct which holds the line and col of the place in the 
source code where the bad token starts. It it returns true, the token is 
skipped. If it returns false, an exception is thrown - and of course the 
delegate can throw its own exception if it wants to.

But you can also configure the lexer to return an error token instead of using 
the delegate if that's what you prefer. But Walter is right in that if you 
have to check every token for whether it's an error, that will incur overhead. 
So, depending on your use case, that could be unacceptable.

- Jonathan M Davis


More information about the Digitalmars-d mailing list