[RFC] I/O and Buffer Range

Dmitry Olshansky dmitry.olsh at gmail.com
Sun Jan 12 02:58:17 PST 2014


09-Jan-2014 13:23, Brian Schott пишет:
> My experimental lexer generator now uses the buffer range.
> https://github.com/Hackerpilot/Dscanner/tree/NewLexer/stdx
>

Cool!

A minor note:
https://github.com/Hackerpilot/Dscanner/blob/NewLexer/stdx/d/lexer.d#L487

lookahead(n) should always give a slice of length n,
or 0 so you may as well test for != 0.

In general you should avoid marking too often, it takes a bit of .

I'm currently in favor of my 2nd design where marking is replaced by 
.save returning an independent view of buffer, making Buffer a normal 
forward range that is cheap to copy.

https://github.com/blackwhale/datapicked/blob/fwd-buffer-range/dpick/buffer/

Sadly it segfaults with LDC so I can't quite assess its performance :(

> The problem that I have with it right now is that
> range.lookbehind(1).length != range.lookahead(1).length. This was
> confusing.

That indeed may look confusing at start but keep in mind that 
range.front is in fact a lookahead of 1. Thus all algorithms that can 
work with lookahead of 1 LL(1), LALR(1) etc. would easily work any 
forward/input range (though any practical parser need to slice or copy 
parts of input aside).

-- 
Dmitry Olshansky


More information about the Digitalmars-d mailing list