Comments (10)
WIth oneOf, noneOf, char, and count functions above. They take some non-parsec-transformer value as an arg to curry a new function with that value in its environment. Now, should there be way to generalize the capture with a struct and a function?
Take this gist for example:
// F: Fn(E,A,P) -> B
struct Capture<E,A,B,P,F> {
env: E,
parser: P,
func: F
}
from combine.
I sketched out something like the Capture struct when helping giving help in the reddit post. Still, I think the bigger issue is with the oneOf and nonOf functions of what type of argument they should take. With slices they are efficient but bound to a lifetime and a Vec forces allocation. The Cow type could allow for both but forces an additional overhead. I am not sure what is the best approach here.
from combine.
In regards to the Cow type's overhead. (I don't know how much it has). Why not implement both approach but as separate structs/functions? Eg. OneOfVec/one_of_vec and OneOfSlice/one_of_slice.
from combine.
I think Cow should just be an extra 8 bytes for the tag (so 24 bytes for Vec + 8 = 32 bytes) vs 16 bytes for only a slice. I don't believe that there should be any branch overhead for the usage though, since the slice and Vec type both have their pointer and length at the same location in memory.
There is also the option of going even more generically by using some trait which can be implemented for any sort of collection though since the collection traits where removed from the standard library it is probably necessary to define it in the library which seems like overkill.
from combine.
It seems I need sepEndBy
, because I'm tired of trailing comma issue. Is it hard to implement?
from combine.
It shouldn't be particularly hard to implement if feel free to give it a go if you want. If you look at the sepBy parser it should get you most of the way though it is a bit more complex than it needs to be. I can take a look later this week otherwise.
from combine.
sep_end_by
and sep_end_by1
were added in 7ae8d32
from combine.
@Marwes works fine. Thanks a lot!
from combine.
eof
added in 1.3.0
from combine.
Closing since all relevant parsers have presumably been added by now. If a parser is still missing then just open a new issue!
from combine.
Related Issues (20)
- Is there a way to get `Stream<Token=char>` from `io::Read`? HOT 1
- Tools for debugging recursion problems? HOT 4
- Some issue with error reporting
- Errors include unprintable or awkwardly printed characters. HOT 6
- `expected` error strings always quote what was expected, even if it isn't a literal HOT 3
- How about offset into some data? HOT 3
- Outdated tutorial HOT 1
- Native/abstracted sub-parsers HOT 6
- XML parsing for React.js to Solid.js conversion HOT 4
- Comparison with LALRPOP
- Unbounded mutual recursion in Parser impl HOT 3
- Adivce on reducing code size in WASM target HOT 7
- Docs unclear whether `parser!` should be used on nightly rust HOT 2
- Parse `std::process::Child` stdout
- Successful parser will not clear the error stack HOT 1
- build failure
- Implement Pratt parsing or precedence climbing HOT 4
- Choice with Vec of parsers HOT 4
- Documentation request: no_partial
- Worse performance after parsing 2 large values HOT 9
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 combine.