Thread overview | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
July 04, 2012 Parser generator? | ||||
---|---|---|---|---|
| ||||
Hi folks,
Does someone know of a parser generator for D?
If it doesn't exist, I can write a parser by hand, but having it generated (at least for my initial permutation) seems like a better idea...
Thanks,
--
The volume of a pizza of thickness a and radius z can be described by the following formula:
pi zz a
|
July 04, 2012 Re: Parser generator? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Wouter Verhelst | On Wednesday, July 04, 2012 14:53:02 Wouter Verhelst wrote: > Hi folks, > > Does someone know of a parser generator for D? > > If it doesn't exist, I can write a parser by hand, but having it generated (at least for my initial permutation) seems like a better idea... > > Thanks, https://github.com/PhilippeSigaud/Pegged https://github.com/PhilippeSigaud/Pegged/wiki - Jonathan M Davis |
July 04, 2012 Re: Parser generator? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jonathan M Davis | Jonathan M Davis <jmdavisProg@gmx.com> writes: > On Wednesday, July 04, 2012 14:53:02 Wouter Verhelst wrote: >> Hi folks, >> >> Does someone know of a parser generator for D? >> >> If it doesn't exist, I can write a parser by hand, but having it generated (at least for my initial permutation) seems like a better idea... >> >> Thanks, > > https://github.com/PhilippeSigaud/Pegged https://github.com/PhilippeSigaud/Pegged/wiki Whoa. That's so perfect, it makes me drool. Thanks. -- The volume of a pizza of thickness a and radius z can be described by the following formula: pi zz a |
July 04, 2012 Re: Parser generator? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Wouter Verhelst | On Wednesday, July 04, 2012 15:32:16 Wouter Verhelst wrote:
> Jonathan M Davis <jmdavisProg@gmx.com> writes:
> > On Wednesday, July 04, 2012 14:53:02 Wouter Verhelst wrote:
> >> Hi folks,
> >>
> >> Does someone know of a parser generator for D?
> >>
> >> If it doesn't exist, I can write a parser by hand, but having it generated (at least for my initial permutation) seems like a better idea...
> >>
> >> Thanks,
> >
> > https://github.com/PhilippeSigaud/Pegged https://github.com/PhilippeSigaud/Pegged/wiki
>
> Whoa. That's so perfect, it makes me drool.
Yeah. It's pretty cool. It really shows up D's metaprogramming capabilities. The one thing to watch out for though is that such metaprogramming tends to eat up a lot of memory when compiling at this point (primarily because the compiler doesn't manage memory very well at this point - it's approach is very simplistic). So, that may or may not cause you problems. It should be fixed eventually, but it does sometimes cause problems with this sort of thing. std.regex has similar issues.
- Jonathan M Davis
|
July 04, 2012 Re: Parser generator? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jonathan M Davis | On 07/04/2012 11:41 PM, Jonathan M Davis wrote: > On Wednesday, July 04, 2012 15:32:16 Wouter Verhelst wrote: >> Jonathan M Davis<jmdavisProg@gmx.com> writes: >>> On Wednesday, July 04, 2012 14:53:02 Wouter Verhelst wrote: >>>> Hi folks, >>>> >>>> Does someone know of a parser generator for D? >>>> >>>> If it doesn't exist, I can write a parser by hand, but having it >>>> generated (at least for my initial permutation) seems like a better >>>> idea... >>>> >>>> Thanks, >>> >>> https://github.com/PhilippeSigaud/Pegged >>> https://github.com/PhilippeSigaud/Pegged/wiki >> >> Whoa. That's so perfect, it makes me drool. > > Yeah. It's pretty cool. It really shows up D's metaprogramming capabilities. > The one thing to watch out for though is that such metaprogramming tends to > eat up a lot of memory when compiling at this point (primarily because the > compiler doesn't manage memory very well at this point - it's approach is very > simplistic). So, that may or may not cause you problems. It should be fixed > eventually, but it does sometimes cause problems with this sort of thing. > std.regex has similar issues. > > - Jonathan M Davis https://github.com/PhilippeSigaud/Pegged/wiki/Grammars-as-D-Modules |
July 05, 2012 Re: Parser generator? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Wouter Verhelst | > Does someone know of a parser generator for D? http://www.complang.org/ragel/ http://www.semitwist.com/goldie/ |
July 05, 2012 Re: Parser generator? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Wouter Verhelst | Apparently Flex/Bison can be used: see last answer in http://www.digitalmars.com/d/archives/digitalmars/D/31679.html hth, Jerome On 04/07/12 22:53, Wouter Verhelst wrote: > > Hi folks, > > Does someone know of a parser generator for D? > > If it doesn't exist, I can write a parser by hand, but having it > generated (at least for my initial permutation) seems like a better > idea... > > Thanks, > |
July 05, 2012 Re: Parser generator? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jonathan M Davis | Jonathan M Davis <jmdavisProg@gmx.com> writes: > On Wednesday, July 04, 2012 15:32:16 Wouter Verhelst wrote: >> Jonathan M Davis <jmdavisProg@gmx.com> writes: >> > On Wednesday, July 04, 2012 14:53:02 Wouter Verhelst wrote: >> >> Hi folks, >> >> >> >> Does someone know of a parser generator for D? >> >> >> >> If it doesn't exist, I can write a parser by hand, but having it generated (at least for my initial permutation) seems like a better idea... >> >> >> >> Thanks, >> > >> > https://github.com/PhilippeSigaud/Pegged https://github.com/PhilippeSigaud/Pegged/wiki >> >> Whoa. That's so perfect, it makes me drool. > > 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. 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? > The one thing to watch out for though is that such metaprogramming tends to eat up a lot of memory when compiling at this point (primarily because the compiler doesn't manage memory very well at this point - it's approach is very simplistic). I'll say. My parser does more than just identifiers and comments, but it's still not that complex. And yet I manage 1GiB+. Whoa. But that's still acceptable. > So, that may or may not cause you problems. Not really. 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. > It should be fixed eventually, but it does sometimes cause problems with this sort of thing. std.regex has similar issues. Gotcha. -- The volume of a pizza of thickness a and radius z can be described by the following formula: pi zz a |
July 06, 2012 Re: Parser generator? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Wouter Verhelst Attachments:
| > > 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 |
July 06, 2012 Re: Parser generator? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Philippe Sigaud | On Friday, 6 July 2012 at 06:10:28 UTC, Philippe Sigaud wrote: > Roman recently templated the parse tree to allow multiple outputs and we didn't update the docs, sorry. That was https://github.com/chadjoan, not me :) But I was amazed that my needs have been met so well. |
Copyright © 1999-2021 by the D Language Foundation