private void ProcessVar() { _lastIsOperator = null; var value = NameHelper.CreateName(_currToken.Content); var node = new VarAstExpression(); node.Name = value; var intermediateNode = new IntermediateAstNode(node); AstNodesLinker.SetNode(intermediateNode, _nodePoint); _state = State.GotName; }
/// <inheritdoc/> protected override void OnRun() { #if DEBUG //Log($"Result = {Result}"); //Log($"_state = {_state}"); //Log($"_currToken = {_currToken}"); #endif switch (_state) { case State.Init: switch (_currToken.TokenKind) { case TokenKind.OpenRoundBracket: _state = State.WaitForMainParameter; break; case TokenKind.AsyncMarker: if (Result.IsAsync) { throw new UnexpectedTokenException(_currToken); } Result.IsAsync = true; break; default: throw new UnexpectedTokenException(_currToken); } break; case State.WaitForMainParameter: switch (_currToken.TokenKind) { case TokenKind.Identifier: case TokenKind.Word: { _currentParameter = new CallingParameter(); Result.Parameters.Add(_currentParameter); var value = NameHelper.CreateName(_currToken.Content); var node = new ConstValueAstExpression(); node.Value = value; _currentParameter.Value = node; _state = State.GotPositionedMainParameter; } break; case TokenKind.Number: { _currentParameter = new CallingParameter(); Result.Parameters.Add(_currentParameter); _context.Recovery(_currToken); var parser = new NumberParser(_context); parser.Run(); var node = new ConstValueAstExpression(); node.Value = parser.Result; _currentParameter.Value = node; _state = State.GotPositionedMainParameter; } break; case TokenKind.String: { _currentParameter = new CallingParameter(); Result.Parameters.Add(_currentParameter); var node = new ConstValueAstExpression(); node.Value = new StringValue(_currToken.Content); _currentParameter.Value = node; _state = State.GotPositionedMainParameter; } break; case TokenKind.Var: { _currentParameter = new CallingParameter(); Result.Parameters.Add(_currentParameter); var value = NameHelper.CreateName(_currToken.Content); var node = new VarAstExpression(); node.Name = value; _currentParameter.Value = node; _state = State.GotPositionedMainParameter; } break; case TokenKind.CloseRoundBracket: Exit(); break; default: throw new UnexpectedTokenException(_currToken); } break; case State.GotPositionedMainParameter: switch (_currToken.TokenKind) { case TokenKind.Colon: if (_currentParameter.Value != null) { _currentParameter.Name = ConvertValueExprToNameExpr(_currentParameter.Value); _currentParameter.Value = null; } _state = State.WaitForValueOfNamedMainParameter; break; case TokenKind.CloseRoundBracket: Exit(); break; case TokenKind.Comma: _state = State.GotComma; break; default: throw new UnexpectedTokenException(_currToken); } break; case State.WaitForValueOfNamedMainParameter: switch (_currToken.TokenKind) { case TokenKind.EntityCondition: { _context.Recovery(_currToken); var parser = new EntityConditionParser(_context); parser.Run(); _currentParameter.Value = parser.Result; _state = State.GotValueOfNamedMainParameter; } break; case TokenKind.Number: { _context.Recovery(_currToken); var parser = new NumberParser(_context); parser.Run(); var node = new ConstValueAstExpression(); node.Value = parser.Result; _currentParameter.Value = node; _state = State.GotValueOfNamedMainParameter; } break; case TokenKind.String: { var node = new ConstValueAstExpression(); node.Value = new StringValue(_currToken.Content); _currentParameter.Value = node; _state = State.GotValueOfNamedMainParameter; } break; case TokenKind.Word: case TokenKind.Identifier: { var value = NameHelper.CreateName(_currToken.Content); var node = new ConstValueAstExpression(); node.Value = value; _currentParameter.Value = node; _state = State.GotValueOfNamedMainParameter; } break; default: throw new UnexpectedTokenException(_currToken); } break; case State.GotValueOfNamedMainParameter: switch (_currToken.TokenKind) { case TokenKind.CloseRoundBracket: Exit(); break; default: throw new UnexpectedTokenException(_currToken); } break; case State.GotComma: switch (_currToken.TokenKind) { case TokenKind.Number: case TokenKind.Word: case TokenKind.EntityCondition: case TokenKind.Var: case TokenKind.String: _context.Recovery(_currToken); _state = State.WaitForMainParameter; break; default: throw new UnexpectedTokenException(_currToken); } break; default: throw new ArgumentOutOfRangeException(nameof(_state), _state, null); } }