Skip to content

Alternation

An alternation matches one of several alternatives.

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'.

| 'hello'
| 'pomsky'+

Alternation is supported in all flavors.

Alternatives are matched consecutively. The first alternative that matches is used.

Compiled to an alternation. The example above would be compiled to hello|(?:pomsky)+.

Alternations aren’t yet properly optimized. Planned optimizations include:

  • Common prefixes: 'test' | 'testament' | 'testing' to test(?:|ament|ing)
  • Single char alternation: 'a' | 'c' | '?' to [ac?]
  • Support for leading pipes added in Pomsky 0.6
  • Initial implementation in Pomsky 0.1