Shrubbery syntax for Racket

Lobsters Hottest Tools

Summary

Shrubbery notation is a line- and indentation-sensitive text-level notation for the Rhombus programming language in Racket, designed to partially group input for further parsing.

<p><a href="https://lobste.rs/s/dlmkdx/shrubbery_syntax_for_racket">Comments</a></p>
Original Article
View Cached Full Text

Cached at: 06/11/26, 01:38 PM

# Shrubbery Notation Source: [https://docs.racket-lang.org/shrubbery/index.html](https://docs.racket-lang.org/shrubbery/index.html) 0\.46\+9\.2 Rhombus [top](https://docs.racket-lang.org/index.html)contents← prev[up](https://docs.racket-lang.org/index.html)[next →](https://docs.racket-lang.org/shrubbery/example.html) Shrubbery notation is a set of text\-level conventions that build toward a full programming language, such as[Rhombus](https://download.racket-lang.org/releases/9.2/doc/local-redirect/index.html?doc=rhombus&rel=index.html&version=9.2)\. The notation is line\- and indentation\-sensitive, and it is intended to partially group input, but leave further parsing to another layer, especially[enforestation](https://download.racket-lang.org/releases/9.2/doc/local-redirect/index.html?doc=enforest&rel=index.html&version=9.2)\. The parsed form of a shrubbery imposes grouping to ensure that further parsing is consistent with the shrubbery’s lines and indentation\. [1Quick Overview](https://docs.racket-lang.org/shrubbery/example.html) [1\.1Simple Terms](https://docs.racket-lang.org/shrubbery/example.html#%28part._.Simple_.Terms%29) [1\.2Comments](https://docs.racket-lang.org/shrubbery/example.html#%28part._.Comments%29) [1\.3Lines and Indentation](https://docs.racket-lang.org/shrubbery/example.html#%28part._.Lines_and_.Indentation%29) [1\.4Parentheses, Brackets, Braces, and Quotes](https://docs.racket-lang.org/shrubbery/example.html#%28part._.Parentheses__.Brackets__.Braces__and_.Quotes%29) [1\.5S\-Expression Interoperability](https://docs.racket-lang.org/shrubbery/example.html#%28part._.S-.Expression_.Interoperability%29) [2Shrubbery Specification](https://docs.racket-lang.org/shrubbery/spec.html) [2\.1Groups and Blocks](https://docs.racket-lang.org/shrubbery/group-and-block.html) [2\.1\.1Grouping by Lines](https://docs.racket-lang.org/shrubbery/group-and-block.html#%28part._.Grouping_by_.Lines%29) [2\.1\.2Grouping by Opener–Closer Pairs](https://docs.racket-lang.org/shrubbery/group-and-block.html#%28part._.Grouping_by_.Opener--.Closer_.Pairs%29) [2\.1\.3Blocking with:and Indentation](https://docs.racket-lang.org/shrubbery/group-and-block.html#%28part._.Blocking_with___and_.Indentation%29) [2\.1\.4Continuing with Indentation and an Operator](https://docs.racket-lang.org/shrubbery/group-and-block.html#%28part._continuing-op%29) [2\.1\.5Alternatives with\|](https://docs.racket-lang.org/shrubbery/group-and-block.html#%28part._alts%29) [2\.1\.6Separating Groups with;and,](https://docs.racket-lang.org/shrubbery/group-and-block.html#%28part._semicolon%29) [2\.1\.7Line\- and Column\-Insensitivity with«and»](https://docs.racket-lang.org/shrubbery/group-and-block.html#%28part._guillemet%29) [2\.1\.8Continuing a Line with\\](https://docs.racket-lang.org/shrubbery/group-and-block.html#%28part._continuing-backslash%29) [2\.1\.9Group Comments with\#//](https://docs.racket-lang.org/shrubbery/group-and-block.html#%28part._group-comment%29) [2\.1\.10At\-Notation Using@](https://docs.racket-lang.org/shrubbery/group-and-block.html#%28part._at-notation%29) [2\.2Token Parsing](https://docs.racket-lang.org/shrubbery/token-parsing.html) [2\.3At\-Notation Parsing](https://docs.racket-lang.org/shrubbery/at-parsing.html) [3Parsed Representation](https://docs.racket-lang.org/shrubbery/parsed-rep.html) [4Shrubbery Language](https://docs.racket-lang.org/shrubbery/language.html) [5Shrubbery APIs](https://docs.racket-lang.org/shrubbery/Shrubbery_APIs.html) [5\.1Parsing](https://docs.racket-lang.org/shrubbery/parse.html) [5\.2Source Locations and Raw\-Text Properties](https://docs.racket-lang.org/shrubbery/raw-text.html) [5\.3Reconstructing Shrubbery Notation](https://docs.racket-lang.org/shrubbery/print.html) [5\.4Writing Shrubbery Notation](https://docs.racket-lang.org/shrubbery/write.html) [5\.5Tool Support](https://docs.racket-lang.org/shrubbery/tool.html) [5\.5\.1Language Configuration](https://docs.racket-lang.org/shrubbery/tool.html#%28part._.Language_.Configuration%29) [5\.5\.2Syntax Coloring](https://docs.racket-lang.org/shrubbery/tool.html#%28part._.Syntax_.Coloring%29) [5\.5\.3Indentation](https://docs.racket-lang.org/shrubbery/tool.html#%28part._.Indentation%29) [5\.5\.4Term and Group Navigation](https://docs.racket-lang.org/shrubbery/tool.html#%28part._.Term_and_.Group_.Navigation%29) [5\.5\.5Keystrokes](https://docs.racket-lang.org/shrubbery/tool.html#%28part._.Keystrokes%29) [5\.6Shrubbery Variants](https://docs.racket-lang.org/shrubbery/variant.html) [6Design Considerations](https://docs.racket-lang.org/shrubbery/Design_Considerations.html) [6\.1Rationale](https://docs.racket-lang.org/shrubbery/Design_Considerations.html#%28part._.Rationale%29) [6\.2Prior Art](https://docs.racket-lang.org/shrubbery/Design_Considerations.html#%28part._.Prior_.Art%29) [7Editor Support](https://docs.racket-lang.org/shrubbery/tool-support.html) [7\.1Shrubbery Support in DrRacket](https://docs.racket-lang.org/shrubbery/tool-support.html#%28part._drracket-shrubbery%29) [7\.2How to Type«…»](https://docs.racket-lang.org/shrubbery/tool-support.html#%28part._type-guillemet%29) [top](https://docs.racket-lang.org/index.html)contents← prev[up](https://docs.racket-lang.org/index.html)[next →](https://docs.racket-lang.org/shrubbery/example.html)

Similar Articles

Rubish: A Unix shell written in pure Ruby

Hacker News Top

Rubish is a Unix shell written in pure Ruby that aims for full bash compatibility while deeply integrating Ruby features such as blocks, iterators, and method chaining.

Show HN: Nibble

Hacker News Top

Nibble is a C-like systems programming language implemented in 3000 lines of C that generates LLVM IR without external dependencies or heap allocations. It supports defer, recursion, various types, structs, pointers, and includes graphical demos.