Giter Club home page Giter Club logo

Comments (8)

yhirose avatar yhirose commented on June 6, 2024

@timmerov, thanks for the feedback. Could you give me more detailed information, so that I can try to reproduce and debug it?

from cpp-peglib.

timmerov avatar timmerov commented on June 6, 2024

premature send sorry. edited.

from cpp-peglib.

timmerov avatar timmerov commented on June 6, 2024

more details.
input:

syntax = "proto3";
import "path/to/some/file";
package timmerov;
message Foo {
    int x = 1;
}
enum Fred {
    d = 0;
}

output ast:

  - statement[string] ("proto3")
  - statement[string] ("path/to/some/file")
  - statement[token] (timmerov)
  + statement[message_statement]
    - token (Foo)
    + field[type_decl]
      - type[token] (int)
      - token (x)
      - number (1)
  + statement[enum_statement]
    - token (Fred)
    + enum_decl
      - token (d)
      - number (0)

obviously i'm going to want to do different things for the "syntax" and "import", statements.
but ... how do i tell which one is which in the ast?

from cpp-peglib.

timmerov avatar timmerov commented on June 6, 2024

a workaround is to use make more rules.
as per here: https://github.com/timmerov/technomancy/blob/master/peg/src/main.cc
but that makes the grammar somewhat less than ideal. ;->

p.s. thanks, @yhirose ! this thing kinda rocks. ;->
and is waaaaay more gooder than our current bison/flex solution.

from cpp-peglib.

yhirose avatar yhirose commented on June 6, 2024

@timmerov, I changed the peglib.h to keep the selected rule id in an ast node at b76e4fe

Here is the output from peglint:

+ statements
  - statement/0[string] ("proto3")
  - statement/1[string] ("path/to/some/file")
  - statement/2[token] (timmerov)
  + statement/4[message_statement]
    - token (Foo)
    + field/0[type_decl]
      - type[token] (int)
      - token (x)
      - number (1)
  + statement/3[enum_statement]
    - token (Fred)
    + enum_decl
      - token (d)
      - number (0)

Ast node has a new member choice which shows which rule has been applied.

Does it work for you?

from cpp-peglib.

timmerov avatar timmerov commented on June 6, 2024

that looks really good. thanks!
will want to try it.
maybe next week.
feedback then. ;->

from cpp-peglib.

timmerov avatar timmerov commented on June 6, 2024

next week came early this week. ;->
i switched to my preferred grammar.
https://github.com/timmerov/technomancy/blob/master/peg/src/main.cc
it took me a bit to figure out to use original_choice instead of choice.
but after that things look swell.
added benefit is i can switch on choice (an int) instead of if-else comparing strings.
thanks!

(close at will)

from cpp-peglib.

yhirose avatar yhirose commented on June 6, 2024

Yes, original_choice should be used when ast is optimized. Sorry that I didn't mention it.
Thanks for the valuable feedback!

from cpp-peglib.

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.