Expand description
Scheme parser (lexer + S-expression parser)
Ported from OpenJade’s SchemeParser.cxx (~2,500 lines).
§Key Features
- Whitespace-agnostic: Unlike Steel, this parser handles all valid R4RS whitespace
- Line number tracking: Error messages report line:column, not byte spans
- Full R4RS syntax:
- Numbers: integers, reals, hex (#x), octal (#o), binary (#b)
- Strings: escapes (\n, \t, ", \, \xNN)
- Symbols and keywords
- Quote/quasiquote/unquote/unquote-splicing
- Comments: line (;) and block (#| … |#)
- Vectors: #(…)
- Booleans: #t, #f
- Characters: #\a, #\space, #\newline
§Architecture
- Lexer (
Tokenizer): Character stream → Token stream - Parser (
Parser): Token stream → Value (S-expressions)
§OpenJade Correspondence
| Dazzle | OpenJade | Purpose |
|---|---|---|
Token | SchemeParser::tok_ | Token types |
Tokenizer | SchemeParser | Lexical analysis |
Parser | SchemeParser::get* | Syntax analysis |
§Error Handling
Parse errors include:
- Line and column numbers (not byte offsets!)
- Descriptive messages
- Context (what was expected)
Structs§
- Parse
Error - Parse error with line:column position
- Parser
- Parser for building Scheme values from tokens
- Position
- Source code position (line and column)
- Tokenizer
- Tokenizer for Scheme source code
Enums§
- Token
- Token type (corresponds to OpenJade’s token enum)