This commit is contained in:
msyds committed 2026-09-22 16:46:17 -06:00
1 parent a4e068d09b
commit aa63cf2eec
3 files changed
+58 -3

No files matched your search

+41 -2
View File
@@ -47,7 +47,46 @@ directive = #"#!(no-)?fold-case"
(* library *)
library-start = <intertoken-space> library
library = <left-paren> <"define-library">
<intertoken-space> library-name <right-paren>
library = <left-paren> <"define-library"> <intertoken-space>
library-name
library-declaration*
<right-paren>
library-name = <left-paren> library-name-part+ <intertoken-space> <right-paren>
<library-name-part> = symbol | uinteger-10
<library-declaration>
= export-declaration
| import-declaration
| begin-declaration
export-declaration =
<left-paren> <'export'> <intertoken-space> export-spec*
<right-paren>
<export-spec> = symbol
import-declaration =
<left-paren> <'import'> <intertoken-space> import-set+ <right-paren>
<import-set>
= library-name
| import-only
| import-except
| import-prefix
| import-rename
import-only =
<left-paren> <'only'> <intertoken-space> import-set symbol+ <right-paren>
import-except =
<left-paren> <'except'> <intertoken-space> import-set symbol+ <right-paren>
import-prefix =
<left-paren> <'prefix'> <intertoken-space> import-set symbol+ <right-paren>
import-rename =
<left-paren> <'rename'> <intertoken-space>
import-set
(<left-paren> symbol symbol <right-paren>)+
<right-paren>
begin-declaration =
<left-paren>
<'begin'> <intertoken-space>
datum*
<right-paren>
+3
View File
@@ -141,6 +141,9 @@
:datum-start identity
:library-start identity
:library-name list
:import-declaration #(vec (cons :import %&))
:export-declaration #(vec (cons :export %&))
:begin-declaration #(vec (cons :begin %&))
:library (fn [lib-name & decls]
#:library {:name lib-name
:declarations decls})
+14 -1
View File
@@ -25,7 +25,20 @@
(sut/read s :throw? true
:library? true))
"" "()"
"(define-library ())")))
"(define-library ())"
;; broken
#_"(define-library (blah -123))")
(t/is (= '#:library
{:name (my cool lib)
:declarations
([:import (scheme base)]
[:export square]
[:begin (define (square n) (* n n))])}
(sut/read "(define-library (my cool lib)
(import (scheme base))
(export square)
(begin (define (square n) (* n n))))"
:library? true)))))
(t/deftest read-syntax-test
(t/is (sut/unresolved? (sut/read-syntax "123")))