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."
>
>
>

Reply via email to