From ee0f9a79fdf01b45509a16ce58f07a7a67af6350 Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Sun, 29 Oct 2023 14:51:03 +0100 Subject: [PATCH] Ignore leading/trailing/repeated slashes and ampersands. Closes #32. --- preserves-schema.md | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/preserves-schema.md b/preserves-schema.md index 9f42fc4..eb5dbda 100644 --- a/preserves-schema.md +++ b/preserves-schema.md @@ -4,7 +4,7 @@ title: "Preserves Schema" --- Tony Garnock-Jones -February 2023. Version 0.3.1. +February 2023. Version 0.3.2. [abnf]: https://tools.ietf.org/html/rfc7405 @@ -189,12 +189,14 @@ with algebraic data types would produce a labelled-sum-of-products type. ### Alternation definitions. - OrPattern = AltPattern "/" AltPattern *("/" AltPattern) + OrPattern = [orsep] AltPattern 1*(orsep AltPattern) [orsep] + orsep = 1*"/" -The right-hand-side of a definition may supply two or more -*alternatives*. When parsing, the alternatives are tried in order; the -result of the first successful alternative is the result of the entire -parse. +The right-hand-side of a definition may supply two or more *alternatives*. +Alternatives are separated by any number of slashes `/`, and leading or +trailing slashes are ignored. When parsing, the alternatives are tried in +order; the result of the first successful alternative is the result of the +entire parse. **Host-language types.** The type corresponding to an `OrPattern` is an algebraic sum type, a union type, a variant type, or a concrete subclass @@ -223,13 +225,15 @@ there is any). ### Intersection definitions. - AndPattern = NamedPattern "&" NamedPattern *("&" NamedPattern) + AndPattern = [andsep] NamedPattern 1*(andsep NamedPattern) [andsep] + andsep = 1*"&" The right-hand-side of a definition may supply two or more patterns, the *intersection* of whose denotations is the denotation of the overall -definition. When parsing, every pattern is tried: if all succeed, the -resulting information is combined into a single type; otherwise, the -overall parse fails. +definition. The patterns are separated by any number of ampersands `&`, +and leading or trailing ampersands are ignored. When parsing, every +pattern is tried: if all succeed, the resulting information is combined +into a single type; otherwise, the overall parse fails. When serializing, the terms resulting from serializing at each pattern are *merged* together.