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

Reply via email to