Parser generator?
Philippe Sigaud
philippe.sigaud at gmail.com
Thu Jul 5 23:10:06 PDT 2012
> > 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puremagic.com/pipermail/digitalmars-d-learn/attachments/20120706/a9fb2003/attachment.html>
More information about the Digitalmars-d-learn
mailing list