Skip to content

Conversation

@Mjboothaus
Copy link
Contributor

Phase 3: Parser implementation - recursive descent parser that converts tokens to YamlValue structures. Added 10 parser tests. Total: 84 tests passing.

Parser complete! Converts token stream into YamlValue structures.

Implementation:
- parse() - entry point, handles empty documents
- parse_value() - dispatcher (detects mapping/sequence/scalar)
- parse_mapping() - collects key:value pairs
- parse_sequence() - collects list items
- parse_scalar() - converts tokens to YamlValue

Features:
- Recursive descent parsing
- INDENT/DEDENT token handling for nesting
- Support for inline and indented values
- Proper ownership transfer (using ^ operator)
- Type-safe scalar conversion (int, float, bool, string, null)

YamlValue enhancements:
- Added static factory methods (null(), bool(), integer(), float(), string(), sequence(), mapping())
- Fixed ownership semantics for collections
- as_mapping() now returns a copy to avoid ownership issues

Testing:
- 10 new parser tests covering:
  - Empty input
  - All scalar types
  - Simple mappings
  - Multiple key-value pairs
  - Simple sequences
- Total: 84 tests passing (74 lexer + 10 parser)

Next: Phase 4 - Nested structures, public API, and examples

Co-Authored-By: Warp <agent@warp.dev>
@semanticdiff-com
Copy link

Review changes with  SemanticDiff

@Mjboothaus Mjboothaus merged commit 1688418 into main Jan 14, 2026
0 of 2 checks passed
@Mjboothaus Mjboothaus deleted the feature/phase-3-parser branch January 14, 2026 08:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants