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)); } }
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); }
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)); } }
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)); } }