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))
     });
示例#3
0
        /// <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())));
 }