From 78f5f94adc7ebe9656b5ab665b9bc77f7f8d8741 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Madeleine=20Sydney=20=C5=9Alaga?= Date: Tue, 22 Sep 2026 03:42:39 -0600 Subject: [PATCH] --- src/r7rs.ebnf | 12 ++++++++++-- src/scm.clj | 7 ++++++- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/r7rs.ebnf b/src/r7rs.ebnf index e0e1a44..79a7c7b 100644 --- a/src/r7rs.ebnf +++ b/src/r7rs.ebnf @@ -9,12 +9,20 @@ right-paren = ')' (* datum *) = simple-datum - = boolean | symbol + = boolean | symbol | number (* symbol *) -symbol = ordinary-symbol +symbol = ordinary-symbol = #"[\P{Lu}\P{Ll}\P{Lt}\P{Lm}\P{Lo}\P{Nl}\P{No}\P{Pd}\P{Pc}\P{Sc}\P{Po}\P{Sm}\P{Sk}\P{So}\P{Co}\u200c\u200d&&[^;|\".,#]][\P{Lu}\P{Ll}\P{Lt}\P{Lm}\P{Lo}\P{Nl}\P{No}\P{Pd}\P{Pc}\P{Sc}\P{Po}\P{Sm}\P{Sk}\P{So}\P{Co}\u200c\u200d\P{Nd}\P{Me}\P{Mc}.&&[^;|\",#]]*" +(* number *) +number = num-10 + +num-10 = sign #"[0-9]+" + +sign = ('+' | '-')? +exactness = ('#i' | '#e')? + (* atmosphere *) atmosphere = whitespace | comment | directive whitespace = intraline-whitespace | line-ending diff --git a/src/scm.clj b/src/scm.clj index 5636493..474d8ef 100644 --- a/src/scm.clj +++ b/src/scm.clj @@ -59,5 +59,10 @@ [:boolean (match x (:or "#t" "#true") true - (:or "#f" "#false") false)])}))) + (:or "#f" "#false") false)]) + :sign (fn + ([] identity) + ([x] (match x "-" - "+" identity))) + :num-10 (fn [sign digits] + (sign (parse-long digits)))})))