> > Yeah. It's pretty cool. It really shows up D's metaprogramming
> > capabilities.
>
> It's a bit hell to debug it, though. But I finally managed to get a
> working parser out of it.

I received your suggestion of a full debug mode explaining what rules where activated and wich did not.

>
> Except now I can't use it, for some reason. Code:
>
> void buildGraph(Output o) {
>         void parseToGraph(ParseTree p) {
>                 writeln(p.ruleName);
>         }
>
>         parseToGraph(o.parseTree);
> }
>
> void parseconfigs() {
>         Output o = ENI.parse(readText("/tmp/ifaces_data"));
>         buildGraph(o);
> }
>
> produces the following error message:
>
> dmd  -gc -w -unittest -I../../Pegged -c -ofmain.o main.d
> ipcfg/parser.d(45): Error: struct pegged.peg.Output(TParseTree) if (isParseTree!(TParseTree)) is used as a type
> make: *** [main.o] Error 1
>
> Help?

Roman recently templated the parse tree to allow multiple outputs and we didn't update the docs, sorry. That makes Pegged output something other than `Output`. One consequence is hat semantic actions should be templates to function on different kinds of parse trees.

Try:

> void buildGraph(O)(O o) {
>         void parseToGraph(ParseTree p) {
>                 writeln(p.ruleName);
>         }
>
>         parseToGraph(o.parseTree);
> }
>
> void parseconfigs() {
>         auto o = ENI.parse(readText("/tmp/ifaces_data"));
>         buildGraph(o);
> }

What do parseToGraph and buildGraph do?

>
> What does cause problems, though, is that it won't compile with gdc:
>
> gdmd -release  -I../../Pegged -c -ofmain.o main.d
> /home/wouter/code/d/Pegged/pegged/grammar.d:128: Error: template pegged.grammar.PEGGED!(ParseTree).PEGGED.parse(ParseLevel pl = ParseLevel.parsing) parse(ParseLevel pl = ParseLevel.parsing) matches more than one template declaration, /home/wouter/code/d/Pegged/pegged/grammar.d(111):parse(ParseLevel pl = ParseLevel.parsing) and /home/wouter/code/d/Pegged/pegged/grammar.d(126):parse(ParseLevel pl = ParseLevel.parsing)
> make: *** [main.o] Error 1
>
> GDC 4.6, though, so I'll wait until Iain uploads 4.7 to Debian; if that
> doesn't fix it, I'll file bugs where appropriate.

I find it strange that I don't get that error with DMD.

Philippe