Module parser

Module parser 

Source
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

  1. Lexer (Tokenizer): Character stream → Token stream
  2. Parser (Parser): Token stream → Value (S-expressions)

§OpenJade Correspondence

DazzleOpenJadePurpose
TokenSchemeParser::tok_Token types
TokenizerSchemeParserLexical analysis
ParserSchemeParser::get*Syntax analysis

§Error Handling

Parse errors include:

  • Line and column numbers (not byte offsets!)
  • Descriptive messages
  • Context (what was expected)

Structs§

ParseError
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)

Type Aliases§

ParseResult