public override CodeGenPayload Visit(AddToken token, CodeGenPayload state = default) { return(new CodeGenPayload { Expression = Expression.Add(Visit(token.Item1, state).Expression, Visit(token.Item2, state).Expression) }); }
protected T Visit(IToken token, T state = default) { return(token switch { AddToken addToken => Visit(addToken, state), SubtractToken subtractToken => Visit(subtractToken, state), MultiplyToken multiplyToken => Visit(multiplyToken, state), DivideToken divideToken => Visit(divideToken, state), NegateToken negateToken => Visit(negateToken, state), NumberToken numberToken => Visit(numberToken, state), FactorialToken factorialToken => Visit(factorialToken, state), PowerToken powerToken => Visit(powerToken, state), VariableToken variableToken => Visit(variableToken, state), AssignmentToken assignmentToken => Visit(assignmentToken, state), _ => throw new ArgumentOutOfRangeException(nameof(token)) });
public virtual T Visit(AddToken token, T state = default) { return(Visit(token.Item1, state ?? new T()).Combine(Visit(token.Item2, state ?? new T()))); }