Thanks Diego! I really appreciate your comments.

Best regards.
Arturo

On Fri, Feb 2, 2018 at 6:27 AM, Diego Lont <diego.l...@delware.nl> wrote:

> Hi,
>
> I have never used dependents (^ (self dependencyAt: StatementBParser)
> ruleB), but here are my thoughts when reading this.
>
> When parsing it makes sense to make a separation between syntax and
> semantics. Applying this functional distinction in your technical design
> usually makes sense. In practical terms making a class for the syntax (i.e.
> StatementASyntax) and one class for the semantics, subclassing the syntax
> (i.e. StatementASyntax subclass: StatementAParse).
>
> So the question here is what class is responsible for the semantics and
> what class is responsible for the syntax. Depending on the answer on this
> question you should build your tree. Do you want your statement parsers to
> know the semantics of the statements as well, then I would suggest separate
> these in a syntax and a parser (and only having production rules in
> PLParser for rules that combine things and no production rules when the
> rule is merely forward them to your statement parser).
>
> Or do the statement parsers merely do the syntax, and does the PLParser
> apply the semantics (maybe because the semantics is context sensitive), the
> you should not create a duplicate structure in your statement parsers, but
> have the production rules i the PLParser (or a subclass of PLParser).
>
> As to your maintenance nightmare:
> - I would add a superclass for the syntax, and not a subclass for the
> semantics.
> - And maybe you should consider referring to the parser as a resource /
> factory method, so you only have one reference to each of your statement
> parsers.
>
> PLParser>> ruleB
>         ^ (self dependencyAt: self statementBParser) ruleB
>
> PLParser>> statementBParser
>         ^ StatementBParser
>
> Regards,
> Diego
>
>
> > On 01 Feb 2018, at 14:42, Arturo Zambrano <arturo.zambr...@gmail.com>
> wrote:
> >
> > Hi All,
> >  Could you please share some advice on the following situation?
> >  I wrote my first Petit Parser.
> >  From the documentation I read that:
> > 1) it is possible to depend on other parsers making the development more
> modular.
> >  2) The docs also suggest that, in order to separate grammars rules from
> productions, we can make a  parser with productions  a subclass of a parser
> which defines the grammar.
> >
> > I started applying 1) so my structure is something like
> >
> >   AbstractParser   " contains some common basic elements common to all
> subclasses)
> >        StatementAParser
> >        StatementBParser
> >        PLParser  "this guy uses the StatementX parsers"
> >
> >  So there is a parser for different statements of the programming
> language.
> >  The PLParser uses PetitParser dependency mechanism to rely on the
> Statement*Parsers.    For instance:
> >    PLParser>> ruleB
> >       ^ (self dependencyAt: StatementBParser)  ruleB
> >
> >
> > So far so good, the grammar is working, the parser works.
> >
> > Now, I would like to write the productions, separately from the grammar
> part (remember 2) ), so I should make subclasses adding the productions in
> the form
> >   >>ruleA
> >    ^super ruleA  ===> [ my production code]
> >
> > The point is that PLParser explicitly depends on Statements*Parser, and
> the name of the Statement*Parser appears here and there, so creating
> subclasses would result in maintenance nightmare. The new layer of parsers
> with productions will duplicate the dependencies and I foresee it will be a
> mess.
> >
> > So now, I think that having just one big class with all the rules for
> the grammar is better if you plan to separate productions code  isolated
> from the grammar.
> >
> > Am I right? Maybe I'm missing some point regarding writing composed
> parsers and separating productions from grammar.
> >
> > Any pointer or comment is welcome.
> >
> > Arturo
> >
>
>
>

Reply via email to