# Langdev libraries for Rust ## Lexers - [`logos`](https://crates.io/crates/logos) Logos has two goals: To make it easy to create a Lexer, so you can focus on more complex problems and to make the generated Lexer faster than anything you'd write by hand ## Parsers - [`parze`](https://crates.io/crates/parze) Parze is a clean, efficient parser combinator written in Rust - [`lalrpop`](https://crates.io/crates/lalrpop) A convenient LR(1) parser generator - [`nom`](https://crates.io/crates/nom) A byte-oriented, zero-copy, parser combinators library - [`combine`](https://crates.io/crates/combine) Fast parser combinators on arbitrary streams with zero-copy support. - [`pom`](https://crates.io/crates/pom) PEG parser combinators using operator overloading without macros. - [`peg`](https://crates.io/crates/peg) A simple Parsing Expression Grammar (PEG) parser generator. - [`glue`](https://crates.io/crates/glue) Glue is a parser combinator framework for parsing text based formats, it is easy to use and relatively fast too - [`pratt`](https://crates.io/crates/pratt) A general purpose pratt parser for Rust - [`pest`](https://crates.io/crates/pest) A general purpose parser written in Rust with a focus on accessibility, correctness, and performance using parsing expression grammars (PEG) ## Codegen - [`cranelift`](https://crates.io/crates/cranelift) - [`llvm-sys`](https://crates.io/crates/llvm-sys) - [`llama`](https://crates.io/crates/llama) - [`inkwell`](https://crates.io/crates/inkwell) - [`llvm-ir`](https://crates.io/crates/llvm-ir) - [`llvmenv`](https://crates.io/crates/llvmenv) ## String interning - [`lasso`](https://crates.io/crates/lasso) A multithreaded and single threaded string interner with a minimal memory footprint and arena allocation - [`string-interner`](https://crates.io/crates/string-interner) A data structure to cache strings efficiently - [`simple-interner`](https://crates.io/crates/simple-interner) A simple append-only interner - [`string_cache`](https://crates.io/crates/string_cache) A string interning library for Rust, developed as part of the Servo project ## Just-in-time Compilation - [`masm-rs`](https://github.com/playxe/masm-rs) - [`jit`](https://crates.io/crates/jit) (LibJIT) - [`lightning-sys`](https://crates.io/crates/lightning-sys) - [`gccjit`](https://crates.io/crates/gccjit) - [`cranelift`](https://crates.io/crates/cranelift) ## Error reporting - [`codespan-reporting`](https://crates.io/crates/codespan-reporting) Beautiful diagnostic reporting for text-based programming languages - [`codespan`](https://crates.io/crates/codespan) Data structures for tracking locations in source code ## Language server protocol - [`lsp-types`](https://crates.io/crates/lsp-types) - [`tower-lsp`](https://crates.io/crates/tower-lsp) - [`codespan-lsp`](https://crates.io/crates/codespan-lsp) - [`lsp-server`](https://crates.io/crates/lsp-server) ## Testing - [`goldentests`](https://crates.io/crates/goldentests) A golden file testing library where tests can be configured within the same test file - [`lang_tester`](https://crates.io/crates/lang_tester) Concise language testing framework for compilers and VMs (Linux only) - [`compiletest_rs`](https://crates.io/crates/compiletest_rs) The compiletest utility from the Rust compiler as a standalone testing harness ## Unicode - [`unicode-xid`](https://crates.io/crates/unicode-xid) Determine if a char is a valid identifier for a parser and/or lexer according to [Unicode Standard Annex #31](https://www.unicode.org/reports/tr31/) rules. - [`unicode-normalisation`](https://crates.io/crates/unicode-normalization) Unicode character composition and decomposition utilities as described in [Unicode Standard Annex #15](http://www.unicode.org/reports/tr15/) - [`unicode-segmentation`](https://crates.io/crates/unicode-segmentation) Iterators which split strings on Grapheme Cluster or Word boundaries, according to the [Unicode Standard Annex #29](http://www.unicode.org/reports/tr29/) rules - [`unicode-width`](https://crates.io/crates/unicode-width) Determine displayed width of char and str types according to [Unicode Standard Annex #11](http://www.unicode.org/reports/tr11/) rules - [`lexical-sort`](https://crates.io/crates/lexical-sort) Lexicographical sorting of unicode strings ## Incremental compilation - [`salsa`](https://crates.io/crates/salsa) A generic framework for on-demand, incrementalized computation ## Floats/Ints/Bools - [`lexical`](https://crates.io/crates/lexical) Lexical, to- and from-string conversion routines (Fast lexical conversion routines for both `std` and `no_std` environments) - [`lexical-core`](https://crates.io/crates/lexical-core) Lexical, to- and from-string conversion routines (Low-level, lexical conversion routines for use in a `no_std` context) - [`lexical_bool`](https://crates.io/crates/lexical_bool) A bool-like type that can be parsed from a string - [`ryu`](https://crates.io/crates/ryu) A Rust implementation of the PLDI'18 paper [Ryƫ: fast float-to-string conversion](https://dl.acm.org/doi/10.1145/3192366.3192369) by Ulf Adams - [`hexponent`](https://crates.io/crates/hexponent) C11 compliant hex float parsing - [`ordered-float`](https://crates.io/crates/ordered-float) Total ordering on floats ## Binary & object file parsing, generating and processing - [`goblin`](https://crates.io/crates/goblin) - [`gimli`](https://crates.io/crates/gimli) - [`faerie`](https://crates.io/crates/faerie) - [`object`](https://crates.io/crates/object) - [`elf`](https://crates.io/crates/elf) - [`elfkit`](https://crates.io/crates/elfkit) ## Symbolic Execution - [`haybale`](https://crates.io/crates/haybale) Symbolic execution of LLVM IR ## Solvers - [`z3`](https://crates.io/crates/z3) - [`z3-sys`](https://crates.io/crates/z3-sys) - [`z3_ref`](https://crates.io/crates/z3_ref) - [`z3d`](https://crates.io/crates/z3d) - [`boolector`](https://crates.io/crates/boolector) - [`boolector-sys`](https://crates.io/crates/boolector-sys) ## CLI - [`structopt`](https://crates.io/crates/structopt) - [`clap`](https://crates.io/crates/clap) - [`pico-args`](https://crates.io/crates/pico-args) - [`argh`](https://crates.io/crates/argh) ## Repl - [`rustyline`](https://crates.io/crates/rustyline) Rustyline, a readline implementation based on Antirez's Linenoise - [`repl-rs`](https://crates.io/crates/repl-rs) Library to generate a REPL for your application - [`termwiz`](https://crates.io/crates/termwizs) Terminal Wizardry for Unix and Windows ## String handling - [`beef`](https://crates.io/crates/beef) Faster, more compact implementation of [`Cow`](https://doc.rust-lang.org/alloc/borrow/enum.Cow.html). - [`smol_str`](https://crates.io/crates/smol_str) Small-string optimized string type with O(1) clone - [`smallstring`](https://crates.io/crates/smallstring) 'Small string' optimization: store small strings on the stack using smallvec ## Syntax trees - [`rowan`](https://crates.io/crates/rowan) Generic lossless syntax trees ## Pretty printing - [`pretty`](https://crates.io/crates/pretty) Wadler-style pretty-printing combinators in Rust