Hi Doru, I did it the other way to avoid the "if" inside the ParseResult>>add: .
Regards, Juan On Tue, May 28, 2013 at 11:55 AM, Tudor Girba <[email protected]> wrote: > Hi, > > I would more do it the other way around (from large to small): > > niceObject := ParseResult new. > result do: [:eachResult | niceObject add: eachResult ] > > Cheers, > Doru > > > > > On Tue, May 28, 2013 at 2:23 PM, Juan Ignacio Vaccarezza < > [email protected]> wrote: > >> Doru, >> thanks for the answer. >> >> I'm doing it in the way you suggest. >> >> What I ment by know how to add to the result is the following: (Modifing >> a bit the example you gave me) >> >> a := 'AAA' asParser flatten ==> [:token | ResultSelfAdder new >> objectToAdd: token; selector:#addA ]. >> b := 'BBB' asParser flatten ==> [:token | ResultSelfAdder new >> objectToAdd: token; selector:#addB ]. >> c := 'CCC' asParser flatten ==> [:token | ResultSelfAdder new >> objectToAdd: token; selector:#addC ]. >> >> meaningful := a / b / c. >> other := (meaningful / #newline asParser) negate star flatten. >> log := (meaningful / other) delimitedBy: #newline asParser. >> >> result := log end parse: 'AAA >> AAA >> BBB >> CCC >> AAA >> other text >> CCC >> BBB >> other text'. >> >> niceObject := ParseResult new. >> result do: [:eachResult | eachResult addYourselfTo: niceObject] >> >> >> ResutlSelfAdder>>addYourselfTo: aParseResult >> aParseResult perform: self selector with: self objectToAdd. >> >> I hope is clear now, Im pretty new at asking on mailists, and sometimes I >> forget to add crucial information >> Thanks again for your time! >> >> Juan >> >> >> On Tue, May 28, 2013 at 2:08 AM, Tudor Girba <[email protected]>wrote: >> >>> Hi, >>> >>> I am not sure what you mean when you say an object that knows how to add >>> to the result. Basically, you would need to build for each production the >>> object and collect the meaningful ones in the outer scope. >>> >>> Here is something that would work for your example: >>> >>> a := 'AAA' asParser ==> [:token | #a]. >>> b := 'BBB' asParser ==> [:token | #b]. >>> c := 'CCC' asParser ==> [:token | #c]. >>> meaningful := a / b / c. >>> other := (meaningful / #newline asParser) negate star flatten. >>> log := (meaningful / other) delimitedBy: #newline asParser. >>> >>> result := log end parse: 'AAA >>> AAA >>> BBB >>> CCC >>> AAA >>> other text >>> CCC >>> BBB >>> other text'. >>> result select: #isSymbol >>> >>> I am CC-ing the moose mailing list because these questions tend to find >>> better answers there. >>> >>> Cheers, >>> Doru >>> >>> >>> On May 27, 2013, at 11:07 PM, Juan Ignacio Vaccarezza < >>> [email protected]> wrote: >>> >>> > Hi all, >>> > >>> > First of all thanks for the amazing work and aswers to all. Having >>> said that, the problem: >>> > >>> > I need to parse a log, a model that represents the lo is the following: >>> > >>> > ' >>> > AAA >>> > AAA >>> > BBB >>> > Line I don't care which can contain anything that is not AAA BBB or CCC >>> > CCC >>> > AAA >>> > CCC >>> > BBB >>> > Line I don't care which can contain anything that is not AAA BBB or CCC >>> > ' >>> > >>> > I manage to write the grammar which parses this, but then I would >>> lilke to have all the log info digested on a result object which behaves >>> something like this: >>> > >>> > resutlObject as size --> 3 >>> > resultObject bs size --> 2 >>> > restulIbject cs size -->2 >>> > >>> > The option that im using now is that individual parsers (meaning the >>> parser for AAA,BBB,CCC,etc) actually retunrs an object that knows how to >>> add themselves to the result and then, I iterate over the parser's array >>> result asking to each object to add itself to the result. >>> > >>> > Is there a better solution? >>> > >>> > Thanks to all, >>> > Juan. >>> >>> -- >>> www.tudorgirba.com >>> >>> "It's not how it is, it is how we see it." >>> >>> >>> >> > > > -- > www.tudorgirba.com > > "Every thing has its own flow" >
