Comments (1)
I don't think there's a combinator which'll do this for
-break
type of loop out of the box. You can code it up yourself using recursion:
Parser<byte, IEnumerable<byte>> NullTerminated()
=> NullTerminated(64);
Parser<byte, IEnumerable<byte>> NullTerminated(int count)
{
if (count == 0)
{
return Return(new[] { });
}
return Byte.Then(b =>
b == 0
? Return(new[] { })
: NullTerminated(count - 1).Select(bs => new[]{ b }.Concat(bs))
);
}
ofc that won't be very efficient cos you're building parsers at runtime and storing the output bytes in a linked list shaped structure. (Could perhaps tweak this by eg putting the bytes in a List
or caching the recursive NullTerminated
calls but that's messy.)
One way to design an API for this might be some sort of "bounded Many
", which runs a parser in a loop until it fails without consuming input or some maximum number of repetitions is reached. Then your code would look like this:
Parser<byte, IEnumerable<byte>> NullTerminated
=> Token(b => b != 0).ManyUpTo(64); // name TBD
I'd be happy to accept a PR implementing this ManyUpTo
combinator.
from pidgin.
Related Issues (20)
- Question: can this URN parser be improved? HOT 2
- Question: ways around lack of left recursion? HOT 12
- Expression handling examples/documentation HOT 1
- Parsing context HOT 4
- Is there a good way to turn Digit.Repeat(n) into a string? HOT 2
- How do I keep both sides of a match? HOT 4
- Question: How to parse a list of strings? HOT 1
- Tried to rewind past the start of the input. Please report this as a bug in Pidgin! HOT 1
- Parsing pseudo freeform text HOT 4
- Matching an exact string HOT 1
- Add support for .net framework in the new versions HOT 1
- Docs website is down HOT 9
- Support trimming and AOT HOT 5
- AOT generic expansion warning HOT 15
- Can you write an example for a Luau parser? HOT 2
- Consider writing tutorials instead of examples HOT 1
- Confusing API: unexpected EOF error HOT 1
- Can't locate documentation: parsing non-char streams. HOT 4
- Maybe Bug: Many/UnsignedInt Operator ignores Whitespace HOT 6
- Need help with `Try` or `Int(10)` HOT 3
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 pidgin.