Comments (8)
@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.
premature send sorry. edited.
from cpp-peglib.
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.
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.
@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.
that looks really good. thanks!
will want to try it.
maybe next week.
feedback then. ;->
from cpp-peglib.
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.
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)
- About macro and actions HOT 2
- .enter/.leave get called twice, but shouldn't. HOT 3
- Unable to parse "special" characters like £¤¥¦§ HOT 5
- vs.choice() always returns 0 when %whitespace is defined. HOT 1
- peg.pdf document isn't a valid PDF HOT 3
- I create a python binding for this great lib
- Assertion failed: (cut_stack.empty()), function ~Context, file peglib.h, line 803 HOT 2
- Compilation error when trying to pass both `any& dt` and an output param to peg::parser::parse() HOT 2
- Providing a base class to AstBase throws exception. HOT 1
- [Question] Is there a way to receive typed errors (not just strings with error messages)?
- Throw from action gets confusing error HOT 2
- Build is broken with clang on macOS 10.7–10.12: Undefined symbols for architecture x86_64: "typeinfo for std::bad_any_cast" HOT 2
- Why "IdentCont" isn't grouped ? HOT 1
- When executing "test-main" I'm getting segfault HOT 8
- [Question] Multiline object with matched deliminators HOT 2
- Need help understanding what my parser is doing :) HOT 2
- QUESTION: How does one use "apd" (and predicate operator) HOT 1
- Tests fail to compile HOT 3
- Performance comparison with boost::spirit, PEGTL etc.? HOT 2
- Tag 1.8.5 needed HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from cpp-peglib.