Comments (3)
Reading your request literally:
Currently the SourcePos
data structure is only used for error reporting - it is the responsibility of the running parser to update it in whatever way makes sense for it, and the "API" for doing so is public - adding fields could break parsers built on top of Parsec using a custom token-type.
For example the built-in character parsers, all of them are built on top of Text.Parsec.Char.satisfy
, which is a wrapper around Text.Parsec.Prim.tokenPrim
- satisfy
tells tokenPrim
to use the function updatePosChar
to update the SourcePos
.
Digging a bit deeper:
It looks like you actually want to track the tokens consumed, not necessarily the characters consumed.
This would be different from the reported source position when we're parsing a stream of some other token type which has embedded location information in the token itself - the expectation is that the primitive parsers for the token-type will lift the token source positions into the SourcePos
type while it parses (for the Char
token-type this lifting is pretty simple).
A token-count would live in a new field in Text.Parsec.Prim.State
. You'd need to figure out how to update tokens
, token
and tokenPrim
in Text.Parsec.Prim
. I'd also want to know how this affects run-time and memory usage of Parsec-based parsers.
from parsec.
Yes, indeed, your deeper reading is what I was going for – a token count of number of tokens consumed. Perhaps SourcePos
is not the right location for that, you are right. I was also unsure of whether this already existed and I had simply missed it.
So, it sounds like there is no fundamental reason this doesn't exist – more like one of lack of need perhaps or lack of effort to do it. Thanks! I do not think that I will be implementing this – as I have not personally needed this and do not think it is a good idea to implement features "just in case someone someday" needs them someday... So you can probably go ahead and close the issue – thanks for the clarification.
from parsec.
Okay!
I'm not opposed to this sort of thing, but I'll close the issue until someone wants to push for it.
from parsec.
Related Issues (20)
- (>>=) leaks memory
- Documentation regarding updatePosChar does not match the function's behaviour
- tokenise comments
- add a parameter to makeTokenParser to specify options for treating space by lexeme
- `updatePosChar` does not increment line number like doccumentation says
- GHC 9.2.1 release? HOT 2
- Which unfoldM is meant in "unfoldM uncons gives the [t] corresponding to the stream"?
- Compatibility with mtl-2.3 HOT 2
- string function not working correctly with (<|>) when the head of the strings are the same but their tails are not HOT 2
- Link in readme broken HOT 1
- How to handle include?
- Parsec crashes HOT 2
- cabal build -c 'mtl == 2.2.1' fails because of Safe Haskell HOT 7
- Generate syntax highlighting files HOT 1
- Parameterized enclosing for char and string literals HOT 1
- The recent fix of the `(>>=)` memory leak seems to cause an enormous performance degradation. HOT 22
- Track consumed token count in ParserState (and ParseError)
- Haddock combinator 'many' is applied to a parser that accepts an empty string. HOT 5
- End of Line Parser HOT 2
- `anyToken` breaks source position state 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 parsec.