2021-03-09 14:59:40 +00:00
|
|
|
@<EmacsMode "-*- preserves -*-">
|
|
|
|
|
2021-05-17 12:54:06 +00:00
|
|
|
; TODO: some kind of constants
|
|
|
|
; TODO: rename "version" to "schema-version" ?
|
|
|
|
|
2021-03-09 14:59:40 +00:00
|
|
|
version 1 .
|
|
|
|
|
2021-04-01 18:31:08 +00:00
|
|
|
Bundle = <bundle @modules Modules>.
|
|
|
|
Modules = { ModulePath: Schema ...:... }.
|
|
|
|
|
2021-03-17 13:36:44 +00:00
|
|
|
Schema = <schema {
|
2021-03-09 14:59:40 +00:00
|
|
|
version: Version
|
2021-05-17 12:54:06 +00:00
|
|
|
embeddedType: EmbeddedTypeName
|
2021-03-17 18:17:19 +00:00
|
|
|
definitions: Definitions
|
2021-03-09 14:59:40 +00:00
|
|
|
}>.
|
|
|
|
|
|
|
|
; version 1 .
|
|
|
|
Version = 1 .
|
|
|
|
|
2021-05-17 12:54:06 +00:00
|
|
|
EmbeddedTypeName = Ref / #f.
|
2021-03-11 16:59:40 +00:00
|
|
|
|
2021-03-17 18:17:19 +00:00
|
|
|
Definitions = { symbol: Definition ...:... }.
|
|
|
|
|
2021-05-20 20:34:20 +00:00
|
|
|
Definition =
|
|
|
|
; Pattern / Pattern / ...
|
2021-05-21 09:20:25 +00:00
|
|
|
/ <or [@pattern0 NamedAlternative @pattern1 NamedAlternative @patternN NamedAlternative ...]>
|
2021-03-17 13:36:44 +00:00
|
|
|
|
2021-05-20 20:34:20 +00:00
|
|
|
; Pattern & Pattern & ...
|
2021-05-21 09:20:25 +00:00
|
|
|
/ <and [@pattern0 NamedPattern @pattern1 NamedPattern @patternN NamedPattern ...]>
|
2021-03-17 11:20:50 +00:00
|
|
|
|
2021-05-20 20:34:20 +00:00
|
|
|
; Pattern
|
|
|
|
/ Pattern
|
|
|
|
.
|
2021-03-17 13:36:44 +00:00
|
|
|
|
|
|
|
Pattern = SimplePattern / CompoundPattern .
|
2021-03-17 11:20:50 +00:00
|
|
|
|
2021-03-17 13:36:44 +00:00
|
|
|
SimplePattern =
|
2021-03-19 19:42:52 +00:00
|
|
|
; any
|
|
|
|
/ =any
|
|
|
|
|
|
|
|
; special builtins: bool, float, double, int, string, bytes, symbol
|
2021-03-17 11:20:50 +00:00
|
|
|
/ <atom @atomKind AtomKind>
|
2021-03-09 14:59:40 +00:00
|
|
|
|
2021-06-01 14:10:04 +00:00
|
|
|
; matches an embedded value in the input: #!p
|
|
|
|
/ <embedded @interface SimplePattern>
|
2021-03-09 15:45:57 +00:00
|
|
|
|
2021-03-09 14:59:40 +00:00
|
|
|
; =symbol, <<lit> any>, or plain non-symbol atom
|
2021-03-17 11:20:50 +00:00
|
|
|
/ <lit @value any>
|
2021-03-09 14:59:40 +00:00
|
|
|
|
2021-06-25 07:45:07 +00:00
|
|
|
; [p ...] ----> <seqof <ref p>>; see also tuplePrefix below.
|
2021-05-23 22:15:31 +00:00
|
|
|
/ <seqof @pattern SimplePattern>
|
|
|
|
|
|
|
|
; #{p} ----> <setof <ref p>>
|
|
|
|
/ <setof @pattern SimplePattern>
|
|
|
|
|
|
|
|
; {k: v, ...:...} ----> <dictof <ref k> <ref v>>
|
|
|
|
/ <dictof @key SimplePattern @value SimplePattern>
|
|
|
|
|
2021-03-11 09:56:49 +00:00
|
|
|
; symbol, symbol.symbol, symbol.symbol.symbol, ...
|
2021-03-17 11:20:50 +00:00
|
|
|
/ Ref
|
2021-03-17 13:36:44 +00:00
|
|
|
.
|
2021-03-09 14:59:40 +00:00
|
|
|
|
2021-03-17 13:36:44 +00:00
|
|
|
CompoundPattern =
|
2021-03-09 14:59:40 +00:00
|
|
|
; <label a b c> ----> <rec <lit label> <tuple [<ref a> <ref b> <ref c>]>>
|
|
|
|
; except for record labels
|
|
|
|
; <<rec> x y> ---> <rec <ref x> <ref y>>
|
2021-03-17 18:17:19 +00:00
|
|
|
/ <rec @label NamedPattern @fields NamedPattern>
|
2021-03-09 14:59:40 +00:00
|
|
|
|
|
|
|
; [a b c] ----> <tuple [<ref a> <ref b> <ref c>]>
|
2021-05-23 22:15:31 +00:00
|
|
|
/ <tuple @patterns [NamedPattern ...]>
|
2021-03-09 14:59:40 +00:00
|
|
|
|
2021-06-25 07:45:07 +00:00
|
|
|
; [a b c ...] ----> <tuplePrefix [<ref a> <ref b>] <seqof <ref c>>>
|
2021-05-25 12:11:33 +00:00
|
|
|
; TODO: [@fixed0 NamedPattern @fixedN NamedPattern ...]
|
2021-06-25 07:45:07 +00:00
|
|
|
/ <tuplePrefix @fixed [NamedPattern ...] @variable NamedSimplePattern>
|
2021-03-09 14:59:40 +00:00
|
|
|
|
|
|
|
; {a: b, c: d} ----> <dict {a: <ref b>, c: <ref d>}>
|
2021-03-17 13:36:44 +00:00
|
|
|
/ <dict @entries DictionaryEntries>
|
2021-03-17 11:20:50 +00:00
|
|
|
.
|
|
|
|
|
2021-03-17 19:01:26 +00:00
|
|
|
DictionaryEntries = { any: NamedSimplePattern ...:... }.
|
2021-03-17 13:36:44 +00:00
|
|
|
|
2021-03-17 11:20:50 +00:00
|
|
|
AtomKind = =Boolean / =Float / =Double / =SignedInteger / =String / =ByteString / =Symbol .
|
2021-03-09 14:59:40 +00:00
|
|
|
|
2021-05-20 20:34:20 +00:00
|
|
|
NamedAlternative = [@variantLabel string @pattern Pattern].
|
|
|
|
|
2021-03-17 19:23:55 +00:00
|
|
|
NamedSimplePattern = @named NamedSimplePattern_ / @anonymous SimplePattern .
|
|
|
|
NamedPattern = @named NamedSimplePattern_ / @anonymous Pattern .
|
2021-03-17 19:01:26 +00:00
|
|
|
|
|
|
|
NamedSimplePattern_ = <named @name symbol @pattern SimplePattern>.
|
2021-03-11 09:56:49 +00:00
|
|
|
|
2021-03-14 21:59:53 +00:00
|
|
|
Ref = <ref @module ModulePath @name symbol>.
|
2021-03-11 09:56:49 +00:00
|
|
|
ModulePath = [symbol ...].
|