Alternation
An alternation matches one of several alternatives.
Syntax
Section titled “Syntax”let Alternation = ('|'? Alternatives)?;
let Alternatives = Alternative ('|' Alternative)*;
let Alternative = FixExpression+;
See FixExpression.
Note that an alternation may have a leading pipe. Also note that an alternative may not be empty,
i.e. | |
is not allowed. Use an empty string instead, e.g. 'foo' | '' | 'bar'
.
Example
Section titled “Example”| 'hello'| 'pomsky'+
Support
Section titled “Support”Alternation is supported in all flavors.
Behavior
Section titled “Behavior”Alternatives are matched consecutively. The first alternative that matches is used.
Compilation
Section titled “Compilation”Compiled to an alternation. The example above would be compiled to hello|(?:pomsky)+
.
Issues
Section titled “Issues”Alternations aren’t yet properly optimized. Planned optimizations include:
- Common prefixes:
'test' | 'testament' | 'testing'
totest(?:|ament|ing)
- Single char alternation:
'a' | 'c' | '?'
to[ac?]
History
Section titled “History”- Support for leading pipes added in Pomsky 0.6
- Initial implementation in Pomsky 0.1