Oops, I meant to type Lukas.  Sorry.  But anyway, thanks, thanks, thanks!

On Tuesday, April 26, 2022 at 12:12:50 PM UTC-4 Jeffrey Kegler wrote:

> Lucas, thanks for the excellent answer!
>
> To re-emphasize one of your points.  In general, when designing a 
> Marpa::R2 application, use actions when possible, and events when necessary.
>
> On Tue, Apr 26, 2022 at 5:01 AM Lukas Atkinson <[email protected]> 
> wrote:
>
>> On Tue, 26 Apr 2022 at 02:00, Rk <[email protected]> wrote:
>> > When does one use events or actions?
>> >
>> > Are there distinct use case where events gets used vs actions?
>>
>> Marpa works in two phases: first the recognizer consumes the input. If 
>> this succeeds, we know that the input conforms to the grammar. Then, 
>> optionally, one or more syntax trees can be extracted from the traces left 
>> by the recognizer.
>>
>> Events are triggered during the recognizer phase. For example, we might 
>> get an event whenever a certain lexeme (token) is expected in the input. 
>> This can be used e.g. to plug in to the recognizer and read that lexeme 
>> ourselves, for example if we want to nest different languages or if we want 
>> to introduce context-sensitive features like here-docs. Another use case is 
>> error recovery, for example with the Ruby Slippers parsing strategy.
>>
>> But since events are triggered during the recognizer phase, they can be 
>> difficult to use correctly. There is no guarantee that the parse will 
>> succeed. Depending on the grammar, there might be unresolved ambiguity. 
>> Unless you know exactly what you are doing, event handling should be 
>> stateless.
>>
>> Actions are used during the evaluation phase when the syntax tree is 
>> built. Actions are evaluated bottom-up to build the tree. The actions 
>> describe what should be done with the values on the right hand side of a 
>> rule. It is not necessary that the actions actually create a syntax tree, 
>> they just have to produce some kind of value. For example, a calculator for 
>> arithmetic expressions might use actions to immediately evaluate the 
>> expression (as shown in the Marpa::R2 synposis 
>> <https://metacpan.org/dist/Marpa-R2/view/pod/Marpa_R2.pod#Synopsis>).
>>
>> > When I look at Marpa.pm from Graphviz, there are no actions declared as 
>> part of grammar.(apart from default).
>>
>> The Graphviz2::Marpa module takes a somewhat unusual strategy. It only 
>> produces a value to check that the parse was successful, but does not use 
>> the value to build its syntax tree. Instead, it uses an event-based 
>> approach to process the document.
>>
>> A good example of understanding event-driven parsing might be the SAX 
>> Parser <https://en.wikipedia.org/wiki/Simple_API_for_XML>, an XML 
>> parsing approach popular in a Java context. Normally, an XML parser would 
>> turn the XML document like “<document> text <element/> </document>” into 
>> a Document Object Model, essentially an abstract syntax tree. Instead, the 
>> SAX parser emits events as elements are opened/closed: element start 
>> “document”, text node “text”, self-closing element “element”, element end 
>> “document”.
>>
>> At first glance, it seems unnecessarily complicated that the Graphviz 
>> module is using such an approach. I would have tried to use actions 
>> instead, especially since events can be quite tricky to use correctly. 
>> Maybe there was an unusual design constraint that I don't see – maybe Ron 
>> will chime in later.
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "marpa parser" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected].
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/marpa-parser/CAJTYOd1vJw7sk7Wdh3ai7d0v8REcU4r4n4CzeYvPsSHR1HBLNg%40mail.gmail.com
>>  
>> <https://groups.google.com/d/msgid/marpa-parser/CAJTYOd1vJw7sk7Wdh3ai7d0v8REcU4r4n4CzeYvPsSHR1HBLNg%40mail.gmail.com?utm_medium=email&utm_source=footer>
>> .
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"marpa parser" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/marpa-parser/25b1e984-0cf7-4833-bf3a-ef887ce27389n%40googlegroups.com.

Reply via email to