Comments (3)
Please provide a minimal reproducible example (MRE).
An MRE is intended to reproduce an error using the smallest amount of code. It saves package developers time trying to reproduce the problem; and wading through code that is not relevant to the bug. Ultimately it helps you to get your problem solved quicker.
The MRE should include:
- Packages to be imported.
- The shortest amount of code needed to reproduce the problem.
- A main function that calls your code and demonstrates the problem, i.e. with a failing assertion.
from dart-petitparser.
import 'package:petitparser/petitparser.dart';
Parser a() => char("a");
Parser expression() => (ref0(binaryOperationExpression) | ref0(a)).cast();
Parser binaryOperationExpression() => (ref0(expression) & char("+") & ref0(expression));
Parser statement() => (ref0(expression)).cast();
main() {
print(resolve(statement().end()).parse("a+a"));
}
from dart-petitparser.
Your grammar has left-recursive productions expression
-> binaryOperationExpression
, which leads to infinite recursion at runtime. Have a look look at the tutorial Writing a More Complicated Grammar and Using the Expression Builder, that demonstrate how to build expression grammars.
The simplest way to avoid the recursion is to rewrite the grammar as:
Parser a() => char("a");
Parser statement() => ref0(a).starSeparated(char('+'));
from dart-petitparser.
Related Issues (20)
- Eliminate dynamic calls
- How to upgrade? HOT 7
- Getting line and colone in the code. HOT 2
- Improve error reporting of `ExpressionPaser` HOT 1
- Consider rolling meta back to ^1.8.0 HOT 1
- Greedy parse problem HOT 2
- Higher Unicode planes support? HOT 2
- Collecting Parsed result and passing it to next product HOT 1
- Possible alternative use of switch that might be fast enough HOT 3
- ReferenceParser prevents repeatString optimization HOT 1
- Projects that are using PetitParser HOT 1
- Parsing Latin1 characters HOT 4
- Alternative to deprecated `separatedBy(separator, includeSeparators: false)` HOT 2
- Choice parser behavior HOT 2
- use petitparser to recognize jsonDecode output HOT 1
- Question: parse any word or term HOT 2
- Alternative to ref() HOT 8
- NoSuchMethodError: Class 'SequenceParser<dynamic>' has no instance method '&'. HOT 2
- is there a parser that consumes a string that matches a regex? 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 dart-petitparser.