NIce property that with cut operator(perhaps I should rename it as commit) you don't need to analyze negative lookahead. Negative lookahead ~A B is just (A cut Fail | B). I still use positive lookahead as double negation would obfustace istead of simplifying grammar On Tue, Jan 04, 2011 at 10:28:05AM +0100, Ondřej Bílka wrote: > It turned out that we need split break as combination of what i denote cut > and stop > When we encounter cut in or we skip subsequent branches so A cut B | C has > semantics of A B | ~A C > A branch can be marked by stop and we exit loop if and only if we successfuly > took marked branch > > We can rewrite ordinary loop A* as (A | stop) > > This distinction does not make much sense for PEG but for my beast > > It is nondeterministic topdown parser where we choose lexicographicaly > smallest derivation > with respect to took choices (I introduced break to add or in loop to catch > greedy matching) > Condition to make it linear-time is that we limit recursion to left,rigth and > inside expressions > marked as nested. We assume that expression marked as nested is suffix-free. > Semanticaly we want capture > being enclosed by pair tags like for example nested('(' expression ')' ) > > On Sun, Jan 02, 2011 at 11:57:17AM +0100, Roman Redziejowski wrote: > > This seems to be another way of writing the "repeat-until" operation. > > > > Apparently, version 4.0 of APG (ABNF Parser Generator) by Lowell D. > > Thomas > > had this operation in the form *A!B, meaning "repeat matching A until B > > is > > found." > > It was removed in version 5.0 as being equivalent to *(!B A)B, which is > > the same > > as indicated by Francisco (for some reason APG writes star before > > expressions). > > See [1]http://www.coasttocoastresearch.com/apg/docs/doc50, section > > 3.2.3.5. > > > > My argument for introducing "repeat-until" would be a very concise > > implementation > > (at least in the style I use in my "Mouse"), much shorter than that of > > *(!B A)B. > > Have been considering syntax such as A**B, but cannot make up my mind. > > > > Happy New Year! > > Roman > > > > On 2011-01-02 00:12, Francisco Mota wrote: > > > > It might be convenient sometimes, but I don't think it increases the > > power of PEGs. > > You can always rewrite an expression like "(E1 break | E2)*" as "(!E1 > > E2)* E1?" > > I wonder if there are any grammars that can't be expressed without > > break? > > 2011/1/1 Ondřej Bílka <[2]nel...@seznam.cz> > > > > Hello > > as I started to LR/RR eliminator I noticed that break is handy > > > > It gave idea to introduce break statement to break iteration. > > For example C strings could be parsed as > > '"' ('"' break | '\"' | . )* > > whad do you think about it > > -- > > > > SCSI's too wide. > > > > _______________________________________________ > > PEG mailing list > > [3]...@lists.csail.mit.edu > > [4]https://lists.csail.mit.edu/mailman/listinfo/peg > > > > > > _______________________________________________ > > PEG mailing list > > [5]...@lists.csail.mit.edu > > [6]https://lists.csail.mit.edu/mailman/listinfo/peg > > > > References > > > > Visible links > > 1. http://www.coasttocoastresearch.com/apg/docs/doc50 > > 2. mailto:nel...@seznam.cz > > 3. mailto:PEG@lists.csail.mit.edu > > 4. https://lists.csail.mit.edu/mailman/listinfo/peg > > 5. mailto:PEG@lists.csail.mit.edu > > 6. https://lists.csail.mit.edu/mailman/listinfo/peg > > > _______________________________________________ > > PEG mailing list > > PEG@lists.csail.mit.edu > > https://lists.csail.mit.edu/mailman/listinfo/peg > > > -- > > kernel panic: write-only-memory (/dev/wom0) capacity exceeded. > > _______________________________________________ > PEG mailing list > PEG@lists.csail.mit.edu > https://lists.csail.mit.edu/mailman/listinfo/peg
-- The vulcan-death-grip ping has been applied. _______________________________________________ PEG mailing list PEG@lists.csail.mit.edu https://lists.csail.mit.edu/mailman/listinfo/peg