private static IParseResult <Expression> ParseValue(LLEnumerator <Token.Match> tokens) { var a = Parts.Value.Parse(tokens); if (a is FailedParseResult <Value> aFailure) { return(aFailure.Cast <Expression>()); } if (tokens.LookAhead(Token.Match.Eof).Type != Token.Type.And && tokens.LookAhead(Token.Match.Eof).Type != Token.Type.Or) { return(a.Then(v => new Expression(v))); } var conjunction = Conjunction.Parse(tokens); var b = Parse(tokens); return(a.AndThen(conjunction, b, (aR, cR, bR) => new Expression(aR, cR, bR))); }
public ConjunctionMatchable(IMatchable left, Conjunction conjunction, IMatchable right) { Left = left; Conjunction = conjunction; Right = right; }