digitalmars.D - PEG lib
- spir (47/47) Nov 21 2010 Hello,
Hello,
I have a text processing, matching, parsing, toolkit based on PEG (see belo=
w short description). It should be close to usable, and has some documentat=
ion already. I would be pleased to publish it as a library for others to us=
e eventually (with a free licence).
In the meantime, any kind of review, trial use, argumented critics, would b=
e very useful to help & improve it, esp. to make it good D code -- because =
I'm very new to the language.
Module and doc available at: http://spir.wikidot.com/deematch.
Some characteristics:
* Hopefully, as a tool, it is clear & friendly.
* Grammars/parsers are written in plain D, using a set of typical pattern t=
ypes.
* Produces a tree of rather simple nodes.
* A handful of helper pattern types allow producing an AST directly.
* Custom match actions performed on nodes ("bottom-up processing").
* Testing tools (match trials, specific assertions, test suites).
* Readable feedback (patterns, nodes, tests, errors).
auto digit =3D klass("0-9");
auto natural =3D charString(digit);
auto SPACE =3D drop(optionString(character(' ')));
auto PLUS =3D Composition(SPACE, literal("+"), SPACE);
auto addition =3D list(natural, PLUS, 2);
addition.trial("98 + 765 + 4"); // common testing method
=3D=3D>
------------------------------------------------------------------
pattern : List([0-9]+, Composition(Drop(' '*) "+" Drop(' '*)), 2)
text : "98 + 765 + 4"
outcome : ["98" "765" "4"]
------------------------------------------------------------------
auto nodes =3D natural.findAll("~~1-23__456=3D=3D=3D");
writeln(nodes);
=3D=3D>
["1", "23", "456"]
auto node =3D addition.match("98 + foo");
=3D=3D>
******************************************************************
Match Failure: cannot match expected pattern.
pattern : List([0-9]+,Extract(Drop(' '*) "+" Drop(' '*)),2)
index : 5
found : "foo"
Cannot find at least 2 elements for List pattern [...]
******************************************************************
Denis
-- -- -- -- -- -- --
vit esse estrany =E2=98=A3
spir.wikidot.com
Nov 21 2010








spir <denis.spir gmail.com>