add barus minimus docs

This commit is contained in:
Chris Wanstrath 2025-10-28 21:36:02 -07:00
parent 8112515278
commit 1aa1570135
2 changed files with 33 additions and 4 deletions

View File

@ -207,6 +207,19 @@ Implementation files:
**Why this matters**: This enables shell-like file paths (`readme.txt`) while supporting dictionary/array access (`config.path`) without quotes, determined entirely at parse time based on lexical scope. **Why this matters**: This enables shell-like file paths (`readme.txt`) while supporting dictionary/array access (`config.path`) without quotes, determined entirely at parse time based on lexical scope.
**Array and dict literals**: Square brackets `[]` create both arrays and dicts, distinguished by content:
- **Arrays**: Space/newline/semicolon-separated args that work like calling a function → `[1 2 3]` (call functions using parens eg `[1 (double 4) 200]`)
- **Dicts**: NamedArg syntax (key=value pairs) → `[a=1 b=2]`
- **Empty array**: `[]` (standard empty brackets)
- **Empty dict**: `[=]` (exactly this, no spaces)
Implementation details:
- Grammar rules (shrimp.grammar:194-201): Dict uses `NamedArg` nodes, Array uses `expression` nodes
- Parser distinguishes at parse time based on whether first element contains `=`
- Both support multiline, comments, and nesting
- Separators: spaces, newlines (`\n`), or semicolons (`;`) work interchangeably
- Test files: `src/parser/tests/literals.test.ts` and `src/compiler/tests/literals.test.ts`
**EOF handling**: The grammar uses `(statement | newlineOrSemicolon)+ eof?` to handle empty lines and end-of-file without infinite loops. **EOF handling**: The grammar uses `(statement | newlineOrSemicolon)+ eof?` to handle empty lines and end-of-file without infinite loops.
## Compiler Architecture ## Compiler Architecture

View File

@ -42,13 +42,13 @@ a-file = file.txt
3 3
# symbols can be assigned to functions. The body of the function comes after a colon `:` # symbols can be assigned to functions. The body of the function comes after a colon `:`
add = fn x y: x + y add = do x y: x + y
add 1 2 add 1 2
--- ---
3 3
# Functions can have multiple lines, they are terminated with `end` # Functions can have multiple lines, they are terminated with `end`
sub = fn x y: sub = do x y:
x - y x - y
end end
@ -82,9 +82,25 @@ add 1 (sub 5 2)
4 4
# Arrays use square brackets with space-separated elements
numbers = [1 2 3]
shopping-list = [apples bananas carrots]
empty-array = []
# Dicts use square brackets with key=value pairs
config = [name=Shrimp version=1.0 debug=true]
empty-dict = [=]
# Nested structures work naturally
nested = [
users=[
[name=Alice age=30]
[name=Bob age=25]
]
settings=[debug=true timeout=5000]
]
# HOLD UP # HOLD UP
- how do we handle arrays?
- how do we handle hashes?
- conditionals - conditionals
- loops - loops