Ignore leading/trailing/repeated slashes and ampersands. Closes #32.
This commit is contained in:
parent
49242bb4dc
commit
ee0f9a79fd
|
@ -4,7 +4,7 @@ title: "Preserves Schema"
|
||||||
---
|
---
|
||||||
|
|
||||||
Tony Garnock-Jones <tonyg@leastfixedpoint.com>
|
Tony Garnock-Jones <tonyg@leastfixedpoint.com>
|
||||||
February 2023. Version 0.3.1.
|
February 2023. Version 0.3.2.
|
||||||
|
|
||||||
[abnf]: https://tools.ietf.org/html/rfc7405
|
[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.
|
### 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
|
The right-hand-side of a definition may supply two or more *alternatives*.
|
||||||
*alternatives*. When parsing, the alternatives are tried in order; the
|
Alternatives are separated by any number of slashes `/`, and leading or
|
||||||
result of the first successful alternative is the result of the entire
|
trailing slashes are ignored. When parsing, the alternatives are tried in
|
||||||
parse.
|
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
|
**Host-language types.** The type corresponding to an `OrPattern` is an
|
||||||
algebraic sum type, a union type, a variant type, or a concrete subclass
|
algebraic sum type, a union type, a variant type, or a concrete subclass
|
||||||
|
@ -223,13 +225,15 @@ there is any).
|
||||||
|
|
||||||
### Intersection definitions.
|
### 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
|
The right-hand-side of a definition may supply two or more patterns, the
|
||||||
*intersection* of whose denotations is the denotation of the overall
|
*intersection* of whose denotations is the denotation of the overall
|
||||||
definition. When parsing, every pattern is tried: if all succeed, the
|
definition. The patterns are separated by any number of ampersands `&`,
|
||||||
resulting information is combined into a single type; otherwise, the
|
and leading or trailing ampersands are ignored. When parsing, every
|
||||||
overall parse fails.
|
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
|
When serializing, the terms resulting from serializing at each pattern
|
||||||
are *merged* together.
|
are *merged* together.
|
||||||
|
|
Loading…
Reference in New Issue