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.
