public override CodeGenPayload Visit(DivideToken token, CodeGenPayload state = default) { return(new CodeGenPayload { Expression = Expression.Divide(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)) });
/// <summary> /// Overloaded Parse function to parse a Term /// </summary> /// <param name="walker">Lexer input</param> /// <returns></returns> public IParseNode Parse(TokenWalker walker) { var result = _powerTermParser.Parse(walker); while (walker.NextIsDotOperator()) { var lexem = walker.Pop(); result = lexem.Token switch { DivideToken _ => new DivisionOperator(result, _powerTermParser.Parse(walker), lexem.Position), MultiplicationToken _ => new MultiplicationOperator(result, _powerTermParser.Parse(walker), lexem.Position), ModuloToken _ => new ModuloOperator(result, _powerTermParser.Parse(walker), lexem.Position), _ => result }; } return(result); } }
public virtual T Visit(DivideToken token, T state = default) { return(Visit(token.Item1, state ?? new T()).Combine(Visit(token.Item2, state ?? new T()))); }