Thread overview
Pegged v0.4: longest-match, left-recursion, and expandable parse trees
Mar 02, 2017
Philippe Sigaud
Mar 03, 2017
mogu
Mar 03, 2017
lobo
Mar 03, 2017
Moritz Maxeiner
Mar 03, 2017
Philippe Sigaud
Mar 03, 2017
Bastiaan Veelo
March 02, 2017
Hi,

Pegged is a parser generator based on Parsing Expression Grammars (PEG) written in D, that aims to be both simple to use and work at compile-time.

See: https://github.com/PhilippeSigaud/Pegged

To use Pegged, just call the grammar function with a PEG and mix it in your module. For example:

import pegged.grammar;

mixin(grammar(`
Arithmetic:
    Term     < Factor (Add / Sub)*
    Add      < "+" Factor
    Sub      < "-" Factor
    Factor   < Primary (Mul / Div)*
    Mul      < "*" Primary
    Div      < "/" Primary
    Primary  < Parens / Neg / Pos / Number / Variable
    Parens   < "(" Term ")"
    Neg      < "-" Primary
    Pos      < "+" Primary
    Number   < ~([0-9]+)

    Variable <- identifier
`));

This will create the `Arithmetic` parser, that can parse your usual arithmetic expresion at runtime or compile-time.

// Parsing at compile-time:
enum parseTree1 = Arithmetic("1 + 2 - (3*x-5)*6");
// Runtime:
auto parseTree2 = Arithmetic("1 + 2 - (3*x-5)*6");

-----


This minor release v0.4 (v0.4.1 right now) is on dub (code.dlang.org) right now and introduces the following new features:

 * A longest-match alternation operator, |, which will always choose the longest match during a parse. See [https://github.com/PhilippeSigaud/Pegged/wiki/Extended-PEG-Syntax] for more details and the interest of this operator for grammar writers.

 * The left-recursion engine, introduced in version v0.3.0 is now fully documented in the wiki at [https://github.com/PhilippeSigaud/Pegged/wiki/Left-Recursion]. Pegged can deal with left recursion, hidden left recursion and indirect left recursion. Try it!

 * These improvements allow Pegged to generate a parser that fully parses Extended Pascal files, based on the official ISO 10206:1990 grammar. Have a look at it in the [https://github.com/PhilippeSigaud/Pegged/tree/master/pegged/examples/extended_pascal] directory.

 * The new toHTML function can be used to generate an HTML file containing an expandable tree view that can be manipulated with an HTML5-compliant browser. See [https://github.com/PhilippeSigaud/Pegged/wiki/Parse-Result] for more details on this new fun way to explore parse results (and parse failures!).


Pegged documentation can be found on the wiki [https://github.com/PhilippeSigaud/Pegged/wiki], along with a tutorial [https://github.com/PhilippeSigaud/Pegged/wiki/Pegged-Tutorial].


Thanks a lot for Bastiaan Veelo for these wonderful improvements to Pegged!


March 03, 2017
On Thursday, 2 March 2017 at 20:42:56 UTC, Philippe Sigaud wrote:
> Hi,
>
> Pegged is a parser generator based on Parsing Expression Grammars (PEG) written in D, that aims to be both simple to use and work at compile-time.
>
> See: https://github.com/PhilippeSigaud/Pegged
> ...

Excellent! I love pegged. Thanks for your brilliant works.
March 03, 2017
On Thursday, 2 March 2017 at 20:42:56 UTC, Philippe Sigaud wrote:
> Hi,
>
> Pegged is a parser generator based on Parsing Expression Grammars (PEG) written in D, that aims to be both simple to use and work at compile-time.
>
> [...]

Thanks! This is my all time favourite D library.
March 03, 2017
On Thursday, 2 March 2017 at 20:42:56 UTC, Philippe Sigaud wrote:
> Hi,
>
> Pegged is a parser generator based on Parsing Expression Grammars (PEG) written in D, that aims to be both simple to use and work at compile-time.
>
> See: https://github.com/PhilippeSigaud/Pegged
>
> [...]

Thank you very much for Pegged, if I end up choosing D for the implementation part of my master thesis, Pegged will be very helpful to me.
March 03, 2017
Thank you all for the positive comments!
March 03, 2017
On Friday, 3 March 2017 at 20:37:33 UTC, Philippe Sigaud wrote:
> Thank you all for the positive comments!

Indeed, I subscribe to that! (Literally, I am subscribed to this thread :-))