On 05/04/2009, at 12:57 AM, Emmanuel Onzon wrote: > > The build system is now doing this: > [...] > checking build/test/regress/rt/rt-1.01.30-0: ok > * build/bin/flx.py --test=build : build/test/regress/rt/ > rt-1.01.31-0.flx -> build/test/regress/rt/rt-1.01.31-0.so > checking build/test/regress/rt/rt-1.01.31-0.so: ok > * build/bin/flx.py --test=build : build/test/regress/rt/ > rt-1.01.31-0.flx -> build/test/regress/rt/rt-1.01.31-0 > checking build/test/regress/rt/rt-1.01.31-0: ok > * build/bin/flx.py --test=build : build/test/regress/rt/ > rt-1.01.32-0.flx -> build/test/regress/rt/rt-1.01.32-0.so > checking build/test/regress/rt/rt-1.01.32-0.so: ok > * build/bin/flx.py --test=build : build/test/regress/rt/ > rt-1.01.32-0.flx -> build/test/regre > [...] > > > Running regression tests :) >
OK, so now we have it all working again it is time to break it again :) The hope for the new version of Dypgen is we can get priorities working. The goal is to allow stuff like the following use case: "The end user wishes to add /\ and \/ binary operators to the grammar, these are called Wedge and Vee, and are used for logical and and logical or, for gcd and lcm, and also in lattices and other math stuff where there is some concept of infinum and supremum. The precedence should be higher than logical and/or but lower than + and - somewhere" To make this work, the whole expression grammar needs to be rewritten with priority information instead of using (tail) recursion. And then we have to parse the rewritten grammar. If that works, then we can add new binary operators (since we already have, just to load Felix standard grammar). The syntax I used before was something like: nt [pri] = rest of the production =># scheme action ; We would also require order pri1 < pri2 < pri3; or something. This does NOT handle arbitrary priorities, just a linear ordering, but it does support insertion. (The transitive closure is implied). Unfortunately this makes a real mess of expression RHS. You have to write: expr [term] = expr[term] + expr[<term]; to get left associativity and the right precendences (or is that right assoc ?) This is too messy, so we might do: def sterm = expr[term]; sterm = sterm + <sterm; where <expr[term] is shorthand for expr[<term] But this too is messy .. The problem goes away if non-terminals have unique priorities, in which case the priority name can just be used in lieu of the non- terminal. -- john skaller skal...@users.sourceforge.net ------------------------------------------------------------------------------ _______________________________________________ Felix-language mailing list Felix-language@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/felix-language