An abbreviation for orP(p,q) is p|q.
In case of ambiguity, the value returned by the left-most accepting parser is provided.
If one of the arguments is a string then constParser is used to convert it into a parser.
In an efficient grammar, the first token presented to r will be acceptable to at most one of the input parsers, and then the parser returned by r will be the parser returned by the single accepting input parser.
i1 : (constParser "abc" | constParser "def" : charAnalyzer) "abc" o1 = abc |
i2 : (constParser "abc" | constParser "def" : charAnalyzer) "def" o2 = def |
i3 : (constParser "abc" | "def" : charAnalyzer) "def" o3 = def |
-- ../../../../Macaulay2/packages/Parsing.m2:77-83
Parser | Parser := (p,q) -> new Parser from (
c -> (
p' := p c;
q' := q c;
if p' === null then q'
else if q' === null then p'
else if c === null then p' else p'|q'))