How shidoengie/shlang-rust works
Shlang is a toy programming language with a Rust implementation. Its user-facing purpose is to run programs written in the language; the README shows a main function and points users to the command-line options and examples. The main runtime stages are source lexing, parsing into syntax nodes, and interpretation with scopes, values, and built-ins. The README also documents filesystem, math, and command capabilities through its examples and built-in registrations. Several internal calls are supported by the source index, but the CLI-to-runtime wiring is not shown in the sampled evidence.
Main entry points: interpreter.rs Interpreter · defaults/mod.rs Default environment · functions/mod.rs Built-in functions · natives/mod.rs Native methods
Components 23
Language frontend
- Lexer
src/frontend/lexer.rs - Tokens
src/frontend/tokens.rs - Parser
src/frontend/parser.rs - Syntax nodes
src/frontend/nodes.rs
Interpreter runtime
- Interpreter
src/backend/interpreter.rs - Scopes
src/backend/scope.rs - Values and heap
src/backend/values.rs
Built-in capabilities
- Default environment
src/backend/defaults/mod.rs - Built-in functions
src/backend/defaults/functions/mod.rs - General functions
src/backend/defaults/functions/misc.rs - Representation
src/backend/defaults/functions/repr.rs - Filesystem functions
src/backend/defaults/functions/filesys.rs - Math functions
src/backend/defaults/functions/math.rs - Native methods
src/backend/defaults/natives/mod.rs - Command execution
src/backend/defaults/natives/cmd.rs - Hash maps
src/backend/defaults/natives/hashmap.rs - Lists
src/backend/defaults/natives/lists.rs - Strings
src/backend/defaults/natives/strings.rs
Runtime support
- Language errors
src/lang_errors.rs - Source spans
src/spans.rs - Character storage
src/charvec.rs
Other components
- Program author
- Shlang program
Connections 26
- Program author → Shlang program: writes
README.md - Shlang program → Lexer: lexes source
- Lexer → Tokens: produces tokens
src/frontend/lexer.rs - Lexer → Character storage: uses characters
src/frontend/lexer.rs - Lexer → Source spans: marks locations
src/frontend/lexer.rs - Parser → Lexer: consumes tokens
src/frontend/parser.rs - Parser → Tokens: checks token kinds
src/frontend/parser.rs - Parser → Syntax nodes: builds nodes
src/frontend/parser.rs - Parser → Language errors: reports parse errors
src/frontend/parser.rs - Interpreter → Syntax nodes: evaluates nodes
src/backend/interpreter.rs - Interpreter → Scopes: reads bindings
src/backend/interpreter.rs - Interpreter → Values and heap: evaluates values
src/backend/interpreter.rs - Interpreter → Default environment: loads defaults
src/backend/interpreter.rs - Interpreter → Language errors: returns runtime errors
src/backend/interpreter.rs - Default environment → Scopes: creates bindings
src/backend/defaults/mod.rs - Default environment → Values and heap: registers built-ins
src/backend/defaults/mod.rs - Default environment → Built-in functions: includes functions
src/backend/defaults/mod.rs - Default environment → Native methods: includes natives
src/backend/defaults/mod.rs - Built-in functions → General functions: registers functions
src/backend/defaults/functions/mod.rs - Built-in functions → Representation: registers representation
src/backend/defaults/functions/mod.rs - Built-in functions → Filesystem functions: registers filesystem
src/backend/defaults/functions/mod.rs - Built-in functions → Math functions: registers math
src/backend/defaults/functions/mod.rs - Native methods → Command execution: registers commands
src/backend/defaults/natives/mod.rs - Native methods → Hash maps: registers maps
src/backend/defaults/natives/mod.rs - Native methods → Lists: registers lists
src/backend/defaults/natives/mod.rs - Native methods → Strings: registers strings
src/backend/defaults/natives/mod.rs