Thanks @Lukas for a very clear explanation. Thanks @Jeffrey for great 
summary.

On Tuesday, April 26, 2022 at 9:15:47 AM UTC-7 [email protected] wrote:

> 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/1c5d27a5-2bbe-4b31-8d1e-58caa487e14cn%40googlegroups.com.

Reply via email to