Crate tiny_interner

Source
Expand description

~300 lines of Rust code that implement string internering for your programming language compiler.

The crate caches strings and associates them with unique symbols. These allows constant time comparisons and look-ups to underlying interned strings.

§Examples:

Internings:

use tiny_interner::Interner;

let mut interner = Interner::default();
let symbol0 = interner.get_or_intern("A");
let symbol1 = interner.get_or_intern("B");
let symbol2 = interner.get_or_intern("C");
let symbol3 = interner.get_or_intern("A");

assert_ne!(symbol0, symbol1);
assert_ne!(symbol0, symbol2);
assert_ne!(symbol1, symbol2);
assert_eq!(symbol0, symbol3);

Resolving symbols:

use tiny_interner::Interner;

let mut interner = Interner::default();
let symbol0 = interner.get_or_intern("A");
let symbol1 = interner.get_or_intern("B");

assert_eq!(interner.resolve(0), Some("A"));
assert_eq!(interner.resolve(1), Some("B"));
assert_eq!(interner.resolve(2), None);

Structs§

Backend
Data structures that organizes interned strings.
Interner
Data structure that allows to resolve/intern strings.
Span
Represents a location of an interned string inside the Backend::buffer buffer.

Type Aliases§

Symbol
Represents unique symbol corresponding to some interned string.