Ejemplo n.º 1
0
        public override InterpreterState MoveToNextState(Symbol symbol, ILexemesStack stack, ExecutorContext context)
        {
            switch (symbol.Type)
            {
            case SymbolType.Number:
            case SymbolType.Identifier:
                _argumentBuilder.Append(symbol);
                return(this);

            case SymbolType.Operator:
                var @operator = OperatorFactory.CreateOperator(symbol);

                switch (@operator)
                {
                case OpeningBracket _:
                    _bracketsBalance++;
                    _argumentBuilder.Append(symbol);
                    return(this);

                case ClosingBracket _:
                    _bracketsBalance--;
                    if (_bracketsBalance == 0)
                    {
                        _functionSignature.AppendArgument(_argumentBuilder);
                        return(new FunctionSignatureEndState(_functionSignature));
                    }

                    _argumentBuilder.Append(symbol);
                    return(this);

                case CommaOperator _:
                    if (_bracketsBalance != 1)
                    {
                        return(new ErrorState(symbol));
                    }

                    if (_argumentBuilder.IsEmpty)
                    {
                        return(new ErrorState(symbol));
                    }

                    _functionSignature.AppendArgument(_argumentBuilder);
                    return(new FunctionArgumentReadingState(_functionSignature, null));

                default:
                    _argumentBuilder.Append(symbol);
                    return(this);
                }

            default:
                return(new ErrorState(symbol));
            }
        }
Ejemplo n.º 2
0
        public override InterpreterState MoveToNextState(Symbol symbol, ILexemesStack stack, ExecutorContext context)
        {
            var validatorState = _functionBodyValidator.AppendSymbol(symbol);

            if (validatorState is ErrorState)
            {
                return(validatorState);
            }

            _functionBodyBuilder.Append(symbol);

            if (symbol.IsLast)
            {
                if (_functionBodyValidator.IsValid())
                {
                    _function.Body = _functionBodyBuilder.Body;
                    context._functionsRepository.Add(_function);
                    return(new ClosingBracketOperatorState());
                }
                else
                {
                    return(new ErrorState(symbol));
                }
            }

            return(this);
        }
Ejemplo n.º 3
0
        public override InterpreterState MoveToNextState(Symbol symbol, ILexemesStack stack, ExecutorContext context)
        {
            switch (symbol.Type)
            {
            case SymbolType.Number:
            case SymbolType.Identifier:
                if (symbol.Value.Equals(NumberFactory.DecimalSeparator))
                {
                    return(new ErrorState(symbol));
                }

                _variableBuilder.Append(symbol);
                return(this);

            case SymbolType.Operator:
                var @operator  = OperatorFactory.CreateOperator(symbol);
                var identifier = VariableFactory.CreateVariable(_variableBuilder);

                if (@operator is OpeningBracket)
                {
                    return(new FunctionSignatureStartState(identifier));
                }

                stack.Push(identifier);
                stack.Push(@operator);

                switch (@operator)
                {
                case AssignmentOperator _:
                    return(new AssignmentOperatorState());

                case ClosingBracket _:
                    return(new ClosingBracketOperatorState());

                case CommaOperator _:
                    return(new ErrorState(symbol));

                default:
                    return(new BinaryOperatorState());
                }

            default:
                return(new ErrorState(symbol));
            }
        }
Ejemplo n.º 4
0
        public override InterpreterState MoveToNextState(Symbol symbol, ILexemesStack stack, ExecutorContext context)
        {
            switch (symbol.Type)
            {
            case SymbolType.Number:
                _numberBuilder.Append(symbol);
                return(this);

            case SymbolType.Identifier:
                return(new ErrorState(symbol));

            case SymbolType.Operator:
                var @operator = OperatorFactory.CreateOperator(symbol);
                var number    = NumberFactory.CreateNumber(_numberBuilder);

                stack.Push(number);
                stack.Push(@operator);

                switch (@operator)
                {
                case OpeningBracket _:
                case AssignmentOperator _:
                case CommaOperator _:
                    return(new ErrorState(symbol));

                case ClosingBracket _:
                    return(new ClosingBracketOperatorState());

                default:
                    return(new BinaryOperatorState());
                }

            default:
                return(new ErrorState(symbol));
            }
        }