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.
