On Saturday, 12 May 2012 at 05:41:16 UTC, Jonathan M Davis wrote:
It's great that you're working on this. We definitely need more
of this sort of
stuff. However, I would point out that I'm not sure that it
will be acceptable
for Phobos (it _may_ be, but it's not quite what we've been
looking for).
There are two types of lexers/parsers that we've been looking
to add to
Phobos.
1. A direct port of the lexer from dmd's C++ front-end. The API
would be D-
ified to use ranges, but the internals would be almost
identical to the C++
front-end so that porting changes back and forth would be very
easy. It also
would make it easier to replace the C++ front-end with a D one
later if the D
one is very close to the C++ one.
2. A lexer/parser generator using templates and/or CTFE to
generate a
lexer/parser of whatever language using a BNF or EBNF grammar -
probably
similar to what Philippe Sigaud has done to generate a parser
using PEGs. Such
could be used to generate a lexer/parser for D or any other
language.
What you seem to be doing is creating a D-specific parser from
scratch, which
is great, but it's not quite what we've been looking to add to
Phobos. That
doesn't necessarily mean that we can't or won't add it to
Phobos once it's
complete (especially if nothing else gets done first), but it
also may not be
acceptable, because it's not either #1 or #2. That would have
to be decided
once it's done and ready to be reviewed for inclusion in
Phobos. I'm not
trying to discourage you at all. I'm just pointing out that
what you're doing
is quite what we're looking for. Regardless, it _would_ be
interesting to be
able to compare implementations of #1 and #2 against what
you're doing and
seeing which performs better.
- Jonathan M Davis
Yes, my project has different goals from #1 or #2. The primary
need I'm trying to address is making development of tools for D
development much easier. Tools are needed for D to become more
widely used in practise. Secondary (a nice-to-have) would be to
build a compiler on top of that. I plan to do both, but I don't
intend to be backwards-compatible with DMD backend. I hope that
at least part of my code will either influence or be reused in
the reference D compiler (whatever that will be in the future).
It is important to have a reference frontend implementation which
can be used in many tools, otherwise a lot of effort would be
completely wasted and no tool would comply with the D
specification and compilers.