Comments (2)
I think this shares some of the problems of #7 in that parsing expressions do not have names. A grammar binds rule names to parsing expressions, which are arbitrarily nested, like expressions in a programming language. The %action
syntax is bound to these nested expressions, not to rule names. So parsing expressions and their results are really anonymous, there isn't a "type" that we could track and pass through to these functions.
It is possible in theory for us to assign a "type" to nodes based on the rule where they are initially created, where their parsing expression is. However I think this would end up being more confusing, because referencing conceptually "moves" nodes between rules. Some rules generate one of many different types via a choice like a / b / c
-- should the nodes this expression returns retain their original type, or the type of the referencing rule? How should this affect optional nodes, or repeitions?
It would also make grammars harder to refactor; grammar rules are effectively function definitions, and imagine a programming language where every value had the name of the function that generated it attached to it. If you refactored by moving code between functions, or splitting functions into smaller units, you'd need to change how all their values are handled. So adding this "type" information strongly couples the grammar to the program that consumes it, in a way that I believe would cause more hassle than its worth.
In cases like yours, there will usually by logic somewhere that cases about the "type" you've assigned to each ParseNode
and cause different behaviour. I think that logic should live in the parser by causing different types of object to be created, and the different behaviours should be attached to those objects -- the parser is the place you make these decisions.
from canopy.
As mentioned in #7 (comment) I've added a limited form of rule name capture in order to improve error messages. I am still not sold on adding rule names to parse tree nodes, for the reasons mentioned there and on this thread. I will keep it under review for future releases, however.
from canopy.
Related Issues (20)
- installation via npm is broken HOT 4
- TypeError: Invalid options argument HOT 3
- Installation via npm does not work HOT 1
- Can we have predicates? HOT 1
- `make test` does not work so as the installation instruction HOT 3
- Parsing spaces in a string with Choices HOT 1
- Make the package web-friendly HOT 7
- Allow Java actions to throw ParserError? HOT 1
- Incorrect call to java.lang.String#substring() HOT 2
- Don't throw a bounds exception when reporting Java errors at EOF. HOT 1
- Add -h and --help flags to the command line tool
- Pass cross-references / named nodes to actions HOT 1
- Question about Improving a grammar HOT 2
- Develop/debug grammar online HOT 2
- Discarding white-space (or any other matched rule) by not a creating node. HOT 3
- When running canopy I get TypeError: mkdirp is not a function HOT 6
- TypeError: mkdirp is not a function HOT 1
- Question about character classes HOT 8
- Missing output for optional nodes HOT 1
- Ordered choices failed to switch to the next choice 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 canopy.