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!


Reply via email to