Create ridiculously fast Lexers
Create ridiculously fast Lexers.
Logos has two goals:
To achieve those, Logos:
…
For more examples and documentation, please refer to the Logos handbook or the crate documentation.
Ridiculously fast!
test identifiers ... bench: 647 ns/iter (+/- 27) = 1204 MB/s
test keywords_operators_and_punctators ... bench: 2,054 ns/iter (+/- 78) = 1037 MB/s
test strings ... bench: 553 ns/iter (+/- 34) = 1575 MB/s
Logos is very much a labor of love. If you find it useful, consider getting me some coffee. ☕
If you'd like to contribute to Logos, then consider reading the Contributing guide.
Logos welcome any kind of contribution: bug reports, suggestions, or new features!
Please use the issues or pull requests tabs, when appropriate.
To release a new version, follow the RELEASE-PROCESS
This code is distributed under the terms of both the MIT license and the Apache License (Version 2.0), choose whatever works for you.
See LICENSE-APACHE and LICENSE-MIT for details.
LLM Policy
regex pattern for a token breaks on the letter `u` and no other letters when using subpatterns
Overflow in `Source::read` bounds check causes UB
`LexerInternal::bump_unchecked` exposes unvalidated offset mutation
Misbehaving `Source` impls can enable Out-of-Bounds reads
Misbehaving `Logos` trait leading to double-free via `ManuallyDrop::take`
`Lexer::bump` is not exception safe, leading to out-of-bounds read
I don't understand the new restriction on greedy matches
True comparable cost (or performance) of usage scenarios
Mutable `Source` for in-place in no_std no-alloc/copy context