Code Monkey home page Code Monkey logo

Comments (5)

badicsalex avatar badicsalex commented on June 6, 2024

Yeah, this looks like the same thing as Tatsu's "include operator": https://tatsu.readthedocs.io/en/stable/syntax.html#id29

The main goal would be to flatten the resulting structure, right?

I was thinking about implementing this feature, because I used it extensively back in the day, but by the current architecture converts rules independently from each-other, so a bunch of refactoring would be needed to do this. Or maybe a preprocessing step.

Out of curiosity, which parsing lib uses ~ for this?

from peginator.

badicsalex avatar badicsalex commented on June 6, 2024

By the way, for this specific case in peginator you could use an override rule to flatten the structure the same way by writing something like this:

assign_statement = 
     LET "(" pairs:assign_pair_list ")" [type_hint] SET assign_rhs [eos] |
     LET "(" pairs:assign_pair_list ")" [type_hint] [eos] |
     LET pairs:assign_pair_list SET assign_rhs [eos] |
     LET pairs:assign_pair_list eos ;

assign_pair_list = @:assign_pair {Comma @:assign_pair} [Comma] ;
assign_pair = {MODIFIERS} Symbol [type_hint] ;
assign_rhs = if_statement|match_statement|expr ;
LET =  "let" ;
SET =  "=" ;

But I understand this does not solve the case where there are multiple fields in the inlined rule.

from peginator.

oovm avatar oovm commented on June 6, 2024

Yes, the main purpose is to get a flat structure and reduce redundant dot calls

from peginator.

oovm avatar oovm commented on June 6, 2024

I use a preprocessing to generate peginator ast to achieve inline

Can the grammar module be set to pub?

mod grammar;

The current implementation uses interpolated strings, which are neither sound nor type-safe.

from peginator.

badicsalex avatar badicsalex commented on June 6, 2024

Sure I can, but I'm not sure if you want to go that low level (and I guess generate code directly from the AST), it will be pretty unstable.

Note that I'm working on this feature. The syntax will be:

ComplexRule = >OtherRule { >OtherRule2 };

OtherRule = x:Number "," y:Number;
OtherRule = "(" y:Number "," z:Number ")";

It will be preprocessed to be equivalent to the following:

ComplexRule = x:Number "," y:Number { y:Number "," z:Number };

OtherRule = x:Number "," y:Number;
OtherRule = "(" y:Number "," z:Number ")";

Note how the same field names are used.
I think "Dead" rules will not be automatically eliminated from the generated code, but instead I'll just disable the dead code warning for the generated part.

from peginator.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.