Comments (5)
I've solved this issue in my code by reversing the order like @kapinter-atl suggested. However in some cases I do prefer getting the parent so I've added "rulePriorities" configuration which I use after the fact to traverse the parents and if there is a parent with a higher priority I return that.
Most of the time however, the "wanted-rules" I set are not low level like "identifier", I would create a specific rule like: field_name: IDENTIFIER; and set the target rule to "field_name". This works well with the reverse direction.
from antlr4-c3.
Yes, this was a deliberate decision. Otherwise you would constantly get "low level" tokens, like identifier
where you want to get e.g. class name
(which consists of identifiers). That might not always lead to the desired result, but I see no other approach without compromising the original idea.
from antlr4-c3.
The class name
example is interesting and I'd hope you'd be able to avoid those low level tokens by creating a rule to alias identifier
and use that as a preferred rule where necessary. But it seems that regardless of high -> low
or low -> high
it would be difficult to accomodate both use cases.
Perhaps more granular configuration is needed as @jasonf20 mentioned. Either some form of rulePriorities
or being able to specify what direction you want preferred rules to be analysed.
from antlr4-c3.
Yes, that's indeed an interesting idea. Making that switchable should give everyone the best results.
from antlr4-c3.
Hi @mike-lischke I have a related use case. I capture a low-level rule in my preferred rules, but I need to know all the rule lists it can appear within. I could refactor my grammar to duplicate the common rules in the hierarchy, giving them different names, so I can collect low-level-rule, low-level-rule-copy1, low-level-rule-copy2, etc, however I would prefer not doing that for maintenance reasons. Would you be open to a PR that adds a new configuration (e.g. collectAllPreferredRuleLists) that controls whether for each preferred rule a single ruleList or all possible ruleList's are returned? It could be done in a backwards-compatible fashion by adding an optional additionalRuleList field of CandidateRule.
This does intersect with some use cases of the translateRulesTopDown setting. I suspect some people would be leaving translateRulesTopDown = true today because that allows them to capture all possible higher level preferred rules despite them sharing a common lower-level preferred rule descendent. In the future we might want to deprecate that setting in favor of always translating the rules bottom up, and to still be able to capture all desired higher-level rules they could use this collectAllPreferredRuleLists setting and add code to their application to analyze the rule lists to find whether the preferred rule has the desired higher-level rule in one of the possible rule lists.
from antlr4-c3.
Related Issues (20)
- Java port-> NPE happen when followSets contains FollowSetWithPath with null following member HOT 1
- Class extends value undefined is not a constructor or null when using yarn pnp and typescript4 HOT 1
- Infinite loop in processRule()
- Port for Antlr4 runtime HOT 2
- Simple expression parser tests fail when executing out-of-order HOT 3
- About Typescript Runtime (antlr4s) HOT 3
- Candidate token's follow TokenList is inaccurate when the candidate's origin is ambiguous HOT 1
- nameless ScopedSymbol problem HOT 2
- [Question] Antlr-c3 with antlr4-ng runtime, issue with parser.getVocabulary() HOT 2
- How to use with plain JavaScript? HOT 2
- CodeCompleteCore constructor now references getVocabulary is this correct or should it be vocabulary HOT 2
- function to convert editor cursor position to token position HOT 1
- Symbol Tabel HOT 3
- About using esbuild to building HOT 3
- the library ist going to infinity loop HOT 1
- [Bug]: Unexpected behaviour in getAllSymbolsSync of ScopeSymbol
- Add command to esbuild HOT 2
- Autocompleting empty string causes error HOT 1
- Add .cjs output to package HOT 1
- Option to choose the parser rule for which we need the candidates HOT 2
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 antlr4-c3.