D Template based paser generator in 137 loc
BCS
BCS at pathlink.com
Thu Jan 4 10:54:00 PST 2007
This is a totaly template based system. No external utilities are
needed. (* the 137 loc is after removal of all unneeded line)
Here is a slightly compressed use case:
struct set
{
/******* action code ********/
static PObject Action(char[] string : "MULTIPLY")(PObject[3] set)
{...}
static PObject Action(char[] string : "SUM" )(PObject[3] set)
{...}
static PObject Action(char[] string : "PASS" )(PObject[1] set)
{...}
/******** Terminal code *********/
static PObject Terminal(char[] name : "NUM")(IParser p) {...}
static PObject Terminal(char[] name : "PLUS")(IParser p) {...}
static PObject Terminal(char[] name : "TIMES")(IParser p){...}
// "ADD" indecates the root rule
mixin Parser!("ADD",
"PRIMARY:PASS/NUM;
MUL:MULTIPLY/PRIMARY TIMES MUL|PASS/PRIMARY;
ADD:SUM/MUL PLUS ADD|PASS/MUL;");
}
void main()
{
auto a = new ExpGrammer;
a.data = "1 + 3 * 4 + 5 * 5 ";
Value v = cast(Value)set.Parser(a);
assert(v !is null);
writef("%d\n", v.value);
}
full example here:
http://www.webpages.uidaho.edu/~shro8822/exp_grammer.d
full code here:
http://www.webpages.uidaho.edu/~shro8822/dparse.d
More information about the Digitalmars-d-announce
mailing list