public override CodeGenPayload Visit(PowerToken token, CodeGenPayload state = default) { var powExpr = Expression.Power(Visit(token.Item1, state).Expression, Visit(token.Item2, state).Expression); return(state?.Combine(new CodeGenPayload { Expression = powExpr })); }
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(PowerToken token, T state = default) { return(Visit(token.Item1, state ?? new T()).Combine(Visit(token.Item2, state ?? new T()))); }