ocaml-re
redgrep
ocaml-re | redgrep | |
---|---|---|
2 | 4 | |
231 | 150 | |
3.5% | 0.7% | |
8.6 | 5.8 | |
24 days ago | 3 months ago | |
OCaml | C++ | |
GNU General Public License v3.0 or later | Apache License 2.0 |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
ocaml-re
-
Show HN: Regex Derivatives (Brzozowski Derivatives)
Note that it's not difficult to (lazily or not) build a NFA using derivatives as well (with Antimirov's construction).
[1]: https://github.com/ocaml/ocaml-re/
-
Super-expressive – Write regex in natural language
I'm familiar with standard (compact) regex syntax, but I've been using the above syntax recently in a couple small places. I'm a bit on the fence as to which is "better". The compact syntax is, of course, more compact. I think it's a very similar comparison between APL (which I've not used) and most other common programming languages.
One advantage of the expanded syntax is that it's a bit nicer to incorporate a string variable, e.g. "str some_string" vs. "/#{Regexp.escape(some_string)}/" (to borrow Ruby's syntax).
[1] https://github.com/ocaml/ocaml-re
redgrep
-
Show HN: Regex Derivatives (Brzozowski Derivatives)
I don't think Rust regex engine relies on this technique. I guess the main point is when you construct the DFA directly you still have the possibility of the exponential explosion of the number of states. That's why modern engines balance between NFA/DFA and lazy DFA.
Though there is an implementation that relies only on Brzozowski derivatives: https://github.com/google/redgrep
-
Introducing: Pomsky (formerly Rulex)
redgrep did it though: https://github.com/google/redgrep
- Redgrep – grep based on regex derivatives, matches in linear time
-
Speed of Rust vs. C
It couldn't figure it out from looking through ripgrep's website: does ripgrep support intersection and complement of expressions? Like eg https://github.com/google/redgrep does.
Regular languages are closed under those operations after all.
What are some alternatives?
google-drive-ocamlfuse - FUSE filesystem over Google Drive
ixy-languages - A high-speed network driver written in C, Rust, C++, Go, C#, Java, OCaml, Haskell, Swift, Javascript, and Python
recross-coq - Regexp engine in Coq for solving regexp crosswords
smartstring - Compact inlined strings for Rust.
mcilroy-regex - Doug McIlroy's C++ regular expression matching library
libskry_r - Lucky imaging library
super-expressive - 🦜 Super Expressive is a zero-dependency JavaScript library for building regular expressions in (almost) natural language
barre - A Regular Expression Library and CFG parser for Rust using Brzozski Derivatives
agda-regexp-automata - Formalization of Regular Languages in Agda: regular expressions, finite-state automata, proof of equivalence, proof of the pumping lemma.
fst - Represent large sets and maps compactly with finite state transducers.
regexp-Brzozowski - Coq formalization of decision procedures for regular expression equivalence [maintainer=@anton-trunov]
ixy - A simple yet fast user space network driver for Intel 10 Gbit/s NICs written from scratch