From 8cc15a745fa5de0b67c4134f8075d3f9925ab9a0 Mon Sep 17 00:00:00 2001 From: sforman Date: Fri, 4 Aug 2023 09:52:09 -0700 Subject: [PATCH] Parser emits errors; joy --- implementations/scheme-chicken/joy.scm | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/implementations/scheme-chicken/joy.scm b/implementations/scheme-chicken/joy.scm index b983396..dd32e72 100644 --- a/implementations/scheme-chicken/joy.scm +++ b/implementations/scheme-chicken/joy.scm @@ -1,5 +1,18 @@ (import (chicken string)) +(define (joy stack expression dict) + (if (null? expression) + (values stack dict) + (if (string? (car expression)) + (receive (s e dict0) + (joy-eval (car expression) stack (cdr expression) dict) + (joy s e dict0)) + (joy (cons (car expression) stack) (cdr expression) dict)))) + +(define (joy-eval symbol stack expression dict) + (values (cons symbol stack) expression dict)) + + (define (string-replace str from to) (string-intersperse (string-split str from #t) to)) @@ -15,7 +28,7 @@ (define (expect-right-bracket tokens acc) (if (null? tokens) - (/ 2 0) + (error "Missing closing bracket.") (expect-right-bracket-lookahead (car tokens) (cdr tokens) acc))) (define (expect-right-bracket-lookahead token tokens acc) @@ -29,7 +42,7 @@ (values (cons (tokenator token) el) rest))))) (define (one-token-lookahead token tokens) - (cond ((string=? token "]") (/ 1 0)) + (cond ((string=? token "]") (error "Extra closing bracket.")) ((string=? token "[") (expect-right-bracket tokens '())) (else (values (tokenator token) tokens)))) @@ -54,7 +67,11 @@ (define (joy-expression-to-string expr) (string-intersperse (map joy-term-to-string expr) " ")) +(define (doit text) + (receive (stack dict) + (joy '() (text-to-expression text) '()) + (joy-expression-to-string stack))) -(display (joy-expression-to-string (text-to-expression "ab cd [[ ]] 234 [true] false"))) +(display (doit "ab cd [[ ]] 234 [true] false")) (newline) -- 2.11.0