Ejemplo n.º 1
0
        private ExpressionToken fetchNextToken()
        {
            char cur   = _inputData[_currentIndex];
            var  token = _tokenMapper.Map(cur);

            _currentIndex++;

            switch (token)
            {
            case EExpressionTokenType.ParenthesesOpen:
                return(ExpressionToken.CreateToken(_currentIndex - 1, "(", EExpressionTokenType.ParenthesesOpen));

            case EExpressionTokenType.ParenthesesClose:
                return(ExpressionToken.CreateToken(_currentIndex - 1, ")", EExpressionTokenType.ParenthesesClose));

            case EExpressionTokenType.Digit:
                return(tokenizeNumber(cur));

            case EExpressionTokenType.Whitespace:
                return(ExpressionToken.CreateToken(_currentIndex - 1, " ", EExpressionTokenType.Whitespace));

            case EExpressionTokenType.Add:
                return(ExpressionToken.CreateToken(_currentIndex - 1, "+", EExpressionTokenType.Add));

            case EExpressionTokenType.Sub:
                return(ExpressionToken.CreateToken(_currentIndex - 1, "-", EExpressionTokenType.Sub));

            case EExpressionTokenType.Mult:
                return(ExpressionToken.CreateToken(_currentIndex - 1, "*", EExpressionTokenType.Mult));

            case EExpressionTokenType.Div:
                return(ExpressionToken.CreateToken(_currentIndex - 1, "/", EExpressionTokenType.Div));
            }

            throw new TokenizationException(cur.ToString(), _currentIndex);
        }
        private ExpressionToken fetchNextToken()
        {
            char cur   = _inputData[_currentIndex];
            var  token = _tokenMapper.Map(cur);

            _currentIndex++;

            switch (token)
            {
            case EExpressionTokenType.ParenthesesOpen:
                return(ExpressionToken.CreateToken(_currentIndex - 1, "(", EExpressionTokenType.ParenthesesOpen));

            case EExpressionTokenType.ParenthesesClose:
                return(ExpressionToken.CreateToken(_currentIndex - 1, ")", EExpressionTokenType.ParenthesesClose));

            case EExpressionTokenType.Digit:
                return(tokenizeNumber(cur));

            case EExpressionTokenType.Whitespace:
                return(ExpressionToken.CreateToken(_currentIndex - 1, " ", EExpressionTokenType.Whitespace));

            case EExpressionTokenType.Add:
                return(ExpressionToken.CreateToken(_currentIndex - 1, "+", EExpressionTokenType.Add));

            case EExpressionTokenType.Sub:
                return(ExpressionToken.CreateToken(_currentIndex - 1, "-", EExpressionTokenType.Sub));

            case EExpressionTokenType.Mult:
                return(ExpressionToken.CreateToken(_currentIndex - 1, "*", EExpressionTokenType.Mult));

            case EExpressionTokenType.Div:
                return(ExpressionToken.CreateToken(_currentIndex - 1, "/", EExpressionTokenType.Div));
            }

            throw new ParseException(String.Format("Error at position {0}: \"{1}\" is not a valid input", _inputData.IndexOf(cur) + 1, cur)); // unmatched )
        }