Hi Lukas, thanks for answering! Since all this stuff is pretty new to me sometimes is hard to see when something is an optimization or the right way to do it :)
Cheers, Richo On Tue, Apr 26, 2011 at 2:27 AM, Lukas Renggli <[email protected]> wrote: > > I only played a little with PetitParser but I think the answer is in > > PetitXml>>#element. You see in the action block that it compares the > > "qualified" of the open and close tags and if they're different it > returns a > > PPFailure. It also takes care of the inlineTag in the same block by > asking > > if the fifth node is '/>'. > > This "taking care of the inlineTag" is just an ugly optimization, but > it makes the parser extremely fast :-) > > Ideally you start with a grammar as you propose and add then check if > open and close tag are the same in the callback, as in the example > above. > > Another subtlety that you see in the above example that is the parser: > > [ :stream | stream position ] asParser > > This object returns the position in the stream and makes it possible > to create the failure at the beginning of the close tag. Again, this > is not required to start with. You can create the failure object like > below, it just will not point you to the right place in the input > then: > > PPFailure message: 'tags not matching' at: 0 > > Lukas > > -- > Lukas Renggli > www.lukas-renggli.ch > >
