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