I was trying to extend a expression language in my DSL, but I get ambiguity prediction warning on the priority. How can I sort out the priority in this scenario(using extend)?
1
There are 1 best solutions below
Related Questions in RASCAL
- Git actions with RascalMPL
- Priority in RascalMPL using extend
- Stackoverflow in RascalMPL
- Does M3 AST support Java 8 features?
- Fail translation with typing error in RascalMPL
- Rascal Language Composition and Inheritance
- Automated generation of pretty-printer in Rascal
- Building a Rascal Node via Java Method
- Error Reporting when translating between ASTs
- Using TypePal for context-aware typing
- NoSuchField Error When Accessing 'src' Field in AST Node for Clone Detection Algorithm
- Parsing with Antlr g4 in RascalMPL
- Java compilation failed during syntax definition using rascalMPL due to code too large
- How do I use the Rascal Evaluator to access Rascal functions from a compiled JAR?
- RascalMPL and Rust Lang Interoperation
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
For example, we have a module A:
and then a module B that extends it:
And now when we generate the parser we get a warning about possible ambiguity between the
*and the+rule.The first solution is to add a priority by repeating the original rule. This leads to this version of module B:
The precondition is that the
+rule must be replicated exactly, literally for this to work without introducing yet another ambiguity between the two version of the rule. This includes possible labels. So this would not work:This is a bit clumsy all, so there is the option to use the names of rules in priority declarations as well. For this the original rule must have a name. The module A becomes this:
and then we can write this in module B:
In short: everywhere you can write a full rule, left or right of the
>sign, inside an associativity group, etc, you can write:<label>to refer to any existing labeled rule for the same non-terminal but possibly in a different rule or even a different extended or imported module. If you don't want to add labels, then repeating the entire rule is necessary.