Pegged, a Parsing Expression Grammar (PEG) generator in D
Andrei Alexandrescu
SeeWebsiteForEmail at erdani.org
Sat Mar 10 23:26:02 PST 2012
On 3/10/12 5:56 PM, Andrej Mitrovic wrote:
> I see you are not the only one who started writing string array
> literals like this:
>
> enum PEGCode = grammarCode!(
> "Grammar<- S Definition+ EOI"
> ,"Definition<- RuleName Arrow Expression"
> ,"RuleName<- Identifier>(ParamList?)"
> ,"Expression<- Sequence (OR Sequence)*"
> );
>
> IOW comma on the left side. I know it's not a style preference but
> actually a (unfortunate but needed) technique for avoiding bugs. :)
>
> So can you use this to actually parse D code, extract syntax trees and
> stuff like that? I'm clueless about parsing but it looks very neat.
> Nice work!
I, too, think this is very significant work! Suggestion for Philippe:
instead of this:
enum PEGCode = grammarCode!(
"Grammar <- S Definition+ EOI"
,"Definition <- RuleName Arrow Expression"
,"RuleName <- Identifier>(ParamList?)"
,"Expression <- Sequence (OR Sequence)*"
);
how about this:
enum PEGCode = grammarCode!("
Grammar <- S Definition+ EOI;
Definition <- RuleName Arrow Expression;
RuleName <- Identifier>(ParamList?);
Expression <- Sequence (OR Sequence)*;
");
Splitting on ";" is trivial and makes client code considerably easier to
play with.
I'll get back to this.
Andrei
More information about the Digitalmars-d-announce
mailing list