On 02/28/2012 12:36 AM, CTFE-4-the-win wrote:
We need to have a easy-to-use, complete, seamless, and efficient
lexer-parser generator combo in Phobos, pronto. The lexer itself could
use a character-level PEG or a classic automaton, and emit tokens for
consumption by a parser generator. The two should work in perfect tandem
(no need for glue code). At the end of the day, defining a complete
lexer+parser combo for a language should be just a few lines longer than
the textual representation of the grammar itself.
Are you aware of Philippe Sigaud's PEG work (may become part of his
template book)
Quote Philippe ..
I recently wrote a parsing expression grammar module in D, also to
create grammars and parsers at compile-time and parse inputs at CT.
(PEG: http://en.wikipedia.org/wiki/Parsing_expression_grammar)
Usage is like this:
mixin Grammar(
"JSON <- '{' ( Pair ( ',' Pair )* )? '}'"
, "Pair <- String ':' Value"
, "Value <- String / Number / JSON / Array / True / False / Null"
, `True <- "true"`
(..., rest of JSON grammar)
);
enum result = JSON.parse(
`{ "Hello":42,
"World!":
{
"a":[0,1,2,3]
}
}`);
End Quote
No that bad :) , I think.
Well, I am still a fan of EBNF based parser generators (recursive
decent) but that's an other story. If I recall correctly BCS has created
something working. ( BNF , so limited)