Working through your example below, I *think* the PEG is as follows: rp-expression <- rp-expression_ rp-expression_ <- rp-expression-operand ( rp-expression OPERATOR )* rp-expression-operand <- OPERAND ; to complete my pretend example OPERATOR <- ,"+" / ,"-" / ,"*" OPERAND <- [[:digit:]]
But those top three productions simplify to: rp-expression <- OPERAND ( rp-expression OPERATOR )* And running that through the example given in another e-mail, I generate this parse tree: (#\5 ((#\4 "*") ((#\2 ((#\1 "-"))) "+"))) I think I'm still confused, I really appreciate your continuing to help me. I missed something simple? -Alan On Wed, Apr 13, 2011 at 11:22:39AM -0700, Terence Parr wrote: > Hi Alan, sorry for the confusion. ANTLR accept rule parameters and return > values that it injects into the generated code so > > r[int i] returns [int x] : ... r[elist] ... ; > > yield something like > > int r(int i) { ... r(elist); ... } > > In this case, we don't need any of the precedence operation stuff; stripping > by hand, we get > > rpexpression : rpexpression_ ; > rpexpression_ > : rpexpression_primary > ( ( rpexpression OPERATOR ) )* > ; > rpexpression_primary > : OPERAND > ; > > Ter > On Apr 13, 2011, at 10:54 AM, Alan Post wrote: > > > I don't quite understand your syntax, can you pull me through it? > > Is see that the rpexpression production has been broken int an > > rpexpression, rpexpression_, and prexpression_primary, but I'm > > confused by the [0] and [int _p] tags. They seem like number of > > matches on that production, but I haven't quite worked out how > > to describe that without doing so circularly. > > > > Will you pull me through? > > > > -Alan > > > > On Wed, Apr 13, 2011 at 10:44:14AM -0700, Terence Parr wrote: > >> Hi Robin, > >> > >> Well, my little pattern matching thing would see that as a "nonstandard" > >> operator (not binary or unary etc.) and consider it a suffix operator > >> because it begins with immediate left recursion. It may not be pretty, but > >> here is what I get from > >> > >> rpexpression > >> : rpexpression rpexpression OPERATOR > >> | OPERAND > >> ; > >> > >> becomes > >> > >> rpexpression : rpexpression_[0] ; > >> rpexpression_[int _p] > >> : rpexpression_primary > >> ( ( {_p <= 3}?=> rpexpression OPERATOR ) )* > >> ; > >> rpexpression_primary > >> : OPERAND > >> ; > >> > >> Does not look correct? I have to jump off and prepare for class :) If not, > >> I better add a note to look into it. > >> Ter > >> On Apr 13, 2011, at 10:37 AM, Robin Lee Powell wrote: > >> > >>> On Wed, Apr 13, 2011 at 10:26:14AM -0700, Terence Parr wrote: > >>>> On Apr 12, 2011, at 12:31 PM, Laurence Tratt wrote: > >>>>> On Tue, Apr 12, 2011 at 08:47:42AM -0700, Terence Parr wrote: > >>>>> > >>>>> Dear Terence, > >>>>> > >>>>>> Only limitation is immediate-left-recur handled only. In my > >>>>>> experience, that's good enough :) No point in some complicated > >>>>>> algorithm when this covers any grammar I'd care about. > >>>>> > >>>>> A quick question: is any type of direct left recursion handled? > >>>>> I'm probably being an idiot here (it's my normal mode), but your > >>>>> wiki post suggests that this relies on the grammar being built > >>>>> in an "expression" sort-of way, but the above post suggested > >>>>> there might be a bit more flexibility? > >>>> > >>>> Hi. Yep, in the end, it was straightforward to convert any > >>>> immediate left recursion > >>> > >>> People keep saying that, but I can't seem to figure it out. I > >>> especially can't see any way to deal with left recursion that > >>> doesn't totally break the meaningfulness of the resulting parse > >>> tree. > >>> > >>> Here's the bane of my PEG existence, from the Lojban grammar; it's a > >>> very simple two-argument-only RPN calculator: > >>> > >>> rp-expression <- rp-expression rp-expression operator / operand > >>> > >>> I can't see any way to fix that that leaves the operators associated > >>> with their argumenst properly. > >>> > >>> I'd love some help, if people have time. > >>> > >>> -Robin > >> > >> > >> _______________________________________________ > >> PEG mailing list > >> PEG@lists.csail.mit.edu > >> https://lists.csail.mit.edu/mailman/listinfo/peg > > > > -- > > .i ma'a lo bradi ku penmi gi'e du > > > > _______________________________________________ > > PEG mailing list > > PEG@lists.csail.mit.edu > > https://lists.csail.mit.edu/mailman/listinfo/peg > > > _______________________________________________ > PEG mailing list > PEG@lists.csail.mit.edu > https://lists.csail.mit.edu/mailman/listinfo/peg -- .i ma'a lo bradi ku penmi gi'e du _______________________________________________ PEG mailing list PEG@lists.csail.mit.edu https://lists.csail.mit.edu/mailman/listinfo/peg