Comments (2)
The thing with exceptions might be possible, but a bit tricky to avoid performance problems in the common case.
In the meantime have a look at my last commit:
var xml = Transformations.debug(new JsonParser());
xml.parse('{"a": 1}');
The debug transformation changes the parser to emit the intermediate state with each parser activation/success/failure. This is probably even more useful than a traditional stack trace.
Instance of 'JsonParser'
Instance of '_EndOfInputParser@0x37ace08b'
Instance of '_ChoiceParser@0x37ace08b'
Instance of '_TrimmingParser@0x37ace08b'
Instance of '_WhitespaceParser@0x37ace08b'
Failure[1:1]: whitespace expected
Instance of '_ActionParser@0x37ace08b'
Instance of '_SequenceParser@0x37ace08b'
Instance of '_CharParser@0x37ace08b'
Failure[1:1]: " expected
Failure[1:1]: " expected
Failure[1:1]: " expected
Failure[1:1]: " expected
Instance of '_ActionParser@0x37ace08b'
Instance of '_TrimmingParser@0x37ace08b'
Instance of '_WhitespaceParser@0x37ace08b'
Failure[1:1]: whitespace expected
Instance of '_FlattenParser@0x37ace08b'
Instance of '_SequenceParser@0x37ace08b'
Instance of '_OptionalParser@0x37ace08b'
Instance of '_CharParser@0x37ace08b'
Failure[1:1]: - expected
Success[1:1]: null
Instance of '_ChoiceParser@0x37ace08b'
Instance of '_CharParser@0x37ace08b'
Failure[1:1]: 0 expected
Instance of '_RepeatingParser@0x37ace08b'
Instance of '_DigitParser@0x37ace08b'
Failure[1:1]: digit expected
Failure[1:1]: digit expected
Failure[1:1]: digit expected
Failure[1:1]: digit expected
Failure[1:1]: digit expected
Failure[1:1]: digit expected
Failure[1:1]: digit expected
Instance of '_ActionParser@0x37ace08b'
Instance of '_SequenceParser@0x37ace08b'
Instance of '_TrimmingParser@0x37ace08b'
Instance of '_WhitespaceParser@0x37ace08b'
Failure[1:1]: whitespace expected
Instance of '_CharParser@0x37ace08b'
Success[1:2]: {
Instance of '_WhitespaceParser@0x37ace08b'
Failure[1:2]: whitespace expected
Success[1:2]: {
Instance of '_OptionalParser@0x37ace08b'
Instance of '_ActionParser@0x37ace08b'
Instance of '_SequenceParser@0x37ace08b'
Instance of '_SequenceParser@0x37ace08b'
Instance of '_TrimmingParser@0x37ace08b'
Instance of '_WhitespaceParser@0x37ace08b'
Failure[1:2]: whitespace expected
Instance of '_ActionParser@0x37ace08b'
Instance of '_SequenceParser@0x37ace08b'
Instance of '_CharParser@0x37ace08b'
Success[1:3]: "
Instance of '_RepeatingParser@0x37ace08b'
Instance of '_ChoiceParser@0x37ace08b'
Instance of '_ActionParser@0x37ace08b'
Instance of '_SequenceParser@0x37ace08b'
Instance of '_CharParser@0x37ace08b'
Failure[1:3]: \ expected
Failure[1:3]: \ expected
Failure[1:3]: \ expected
Instance of '_ActionParser@0x37ace08b'
Instance of '_SequenceParser@0x37ace08b'
Instance of '_PredicateParser@0x37ace08b'
Failure[1:3]: \u expected
Failure[1:3]: \u expected
Failure[1:3]: \u expected
Instance of '_ActionParser@0x37ace08b'
Instance of '_SequenceParser@0x37ace08b'
Instance of '_NotParser@0x37ace08b'
Instance of '_PredicateParser@0x37ace08b'
Failure[1:3]: any of "\ expected
Success[1:3]: null
Instance of '_PredicateParser@0x37ace08b'
Success[1:4]: a
Success[1:4]: [null, a]
Success[1:4]: a
Success[1:4]: a
Instance of '_ChoiceParser@0x37ace08b'
Instance of '_ActionParser@0x37ace08b'
Instance of '_SequenceParser@0x37ace08b'
Instance of '_CharParser@0x37ace08b'
Failure[1:4]: \ expected
Failure[1:4]: \ expected
Failure[1:4]: \ expected
Instance of '_ActionParser@0x37ace08b'
Instance of '_SequenceParser@0x37ace08b'
Instance of '_PredicateParser@0x37ace08b'
Failure[1:4]: \u expected
Failure[1:4]: \u expected
Failure[1:4]: \u expected
Instance of '_ActionParser@0x37ace08b'
Instance of '_SequenceParser@0x37ace08b'
Instance of '_NotParser@0x37ace08b'
Instance of '_PredicateParser@0x37ace08b'
Success[1:5]: "
Failure[1:4]: null
Failure[1:4]: null
Failure[1:4]: null
Failure[1:4]: null
Success[1:4]: [a]
Instance of '_CharParser@0x37ace08b'
Success[1:5]: "
Success[1:5]: [", [a], "]
Success[1:5]: a
Instance of '_WhitespaceParser@0x37ace08b'
Failure[1:5]: whitespace expected
Success[1:5]: a
Instance of '_TrimmingParser@0x37ace08b'
Instance of '_WhitespaceParser@0x37ace08b'
Failure[1:5]: whitespace expected
Instance of '_CharParser@0x37ace08b'
Success[1:6]: :
Instance of '_WhitespaceParser@0x37ace08b'
Success[1:7]:
Instance of '_WhitespaceParser@0x37ace08b'
Failure[1:7]: whitespace expected
Success[1:7]: :
Instance of '_ChoiceParser@0x37ace08b'
Instance of '_TrimmingParser@0x37ace08b'
Instance of '_WhitespaceParser@0x37ace08b'
Failure[1:7]: whitespace expected
Instance of '_ActionParser@0x37ace08b'
Instance of '_SequenceParser@0x37ace08b'
Instance of '_CharParser@0x37ace08b'
Failure[1:7]: " expected
Failure[1:7]: " expected
Failure[1:7]: " expected
Failure[1:7]: " expected
Instance of '_ActionParser@0x37ace08b'
Instance of '_TrimmingParser@0x37ace08b'
Instance of '_WhitespaceParser@0x37ace08b'
Failure[1:7]: whitespace expected
Instance of '_FlattenParser@0x37ace08b'
Instance of '_SequenceParser@0x37ace08b'
Instance of '_OptionalParser@0x37ace08b'
Instance of '_CharParser@0x37ace08b'
Failure[1:7]: - expected
Success[1:7]: null
Instance of '_ChoiceParser@0x37ace08b'
Instance of '_CharParser@0x37ace08b'
Failure[1:7]: 0 expected
Instance of '_RepeatingParser@0x37ace08b'
Instance of '_DigitParser@0x37ace08b'
Success[1:8]: 1
Instance of '_DigitParser@0x37ace08b'
Failure[1:8]: digit expected
Success[1:8]: [1]
Success[1:8]: [1]
Instance of '_OptionalParser@0x37ace08b'
Instance of '_SequenceParser@0x37ace08b'
Instance of '_CharParser@0x37ace08b'
Failure[1:8]: . expected
Failure[1:8]: . expected
Success[1:8]: null
Instance of '_OptionalParser@0x37ace08b'
Instance of '_SequenceParser@0x37ace08b'
Instance of '_PredicateParser@0x37ace08b'
Failure[1:8]: any of eE expected
Failure[1:8]: any of eE expected
Success[1:8]: null
Success[1:8]: [null, [1], null, null]
Success[1:8]: 1
Instance of '_WhitespaceParser@0x37ace08b'
Failure[1:8]: whitespace expected
Success[1:8]: 1
Success[1:8]: 1
Success[1:8]: 1
Success[1:8]: [a, :, 1]
Instance of '_RepeatingParser@0x37ace08b'
Instance of '_SequenceParser@0x37ace08b'
Instance of '_TrimmingParser@0x37ace08b'
Instance of '_WhitespaceParser@0x37ace08b'
Failure[1:8]: whitespace expected
Instance of '_CharParser@0x37ace08b'
Failure[1:8]: , expected
Failure[1:8]: , expected
Failure[1:8]: , expected
Success[1:8]: []
Success[1:8]: [[a, :, 1], []]
Success[1:8]: [[a, :, 1]]
Success[1:8]: [[a, :, 1]]
Instance of '_TrimmingParser@0x37ace08b'
Instance of '_WhitespaceParser@0x37ace08b'
Failure[1:8]: whitespace expected
Instance of '_CharParser@0x37ace08b'
Success[1:9]: }
Instance of '_WhitespaceParser@0x37ace08b'
Failure[1:9]: whitespace expected
Success[1:9]: }
Success[1:9]: [{, [[a, :, 1]], }]
Success[1:9]: {a: 1}
Success[1:9]: {a: 1}
Success[1:9]: {a: 1}
Success[1:9]: {a: 1}
Let me know what you think?
from dart-petitparser.
Oooo...nice.
I'll have to try it out next time I'm debugging something.
This does seem better that just a stack trace, but I'll have see.
Thanks!
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
- endless recursion when adding binary operation expressions to grammar HOT 3
- 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.