Hi Bijan,
Please ask further questions in the Moose mailing-list, other people
might be interested too.
I'm trying to understand how PetitParser
initializes grammar classes (the
tutorial doesn't make it clear how to use def: in a class context). I see
now that mutual recursive productions should work out of the box.
You don't need #def: in the context of PPCompositeParser, the
framework does that for you. See the class comment of
PPCompositeParser for additional information.
However, while figuring this out, I noticed this
following bit:
...
parser := PPUnresolvedParser named: aSymbol.
productionIndexesAndNames do: [ :assoc |
self instVarAt: assoc key put: (PPUnresolvedParser named:
assoc value) ].
parser := self perform: aSymbol.
...
It seems that the last line of the snippet should read:
parser def: (self perform: aSymbol).
Yes, you are right. I changed that in the latest version.
However, consider not to loop into the start state. You get a more
reusable model if you use 'parser' simply as a selector of where to
start the grammar (e.g. the method, the method declaration, or the
expression in the example of Smalltalk).
Lukas
This would be consistent with how the rest of the productions initialize
themselves and wouldn't make the first line of the snippet pointless.
I can't really discern any difference in commenting out line one, leaving
everything as is, or shifting the last bit to def: So I'm missing something!
Cheers,
Bijan.
--
Lukas Renggli
www.lukas-renggli.ch