Esempio n. 1
0
        public object Visit(CallingParameter obj)
        {
            string codeString = "";

            //<CallingParameter> ::= ',' <Value> <CallingParameter>
            codeString += ", ";

            if (obj.Value != null)
            {
                codeString += (string)obj.Value.Accept(this);
            }

            if (obj.Parameter != null)
            {
                codeString += (string)obj.Parameter.Accept(this);
            }

            return(codeString);
        }
Esempio n. 2
0
 public object Visit(CallingParameter obj)
 {
     _parameters.Add(new SymbolTable.Variable(null, obj.Value.Accept(this).ToString()));
     obj.Parameter?.Accept(this);
     return(null);
 }
        /// <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);
            }
        }
Esempio n. 4
0
        private void ParseCallString(string callString)
        {
            int leftP  = callString.IndexOf('(');
            int rightP = callString.IndexOf(')');

            if (leftP > 0 && rightP > leftP)
            {
                methodName = callString.Substring(0, leftP).Trim();

                if (rightP - leftP > 1)
                {
                    string parameterString = callString.Substring(leftP + 1, (rightP - leftP) - 1);

                    foreach (string arg in parameterString.Split(','))
                    {
                        string tempArg = arg.Trim();

                        if (tempArg.StartsWith("$") && tempArg.Length > 1)
                        {
                            CallingParameter parameter = new CallingParameter();
                            string[]         splitArgs = tempArg.TrimStart('$').Split('.');

                            switch (splitArgs[0].ToLower())
                            {
                            case "datacontext":
                                parameter.ParameterType = CallingParameterType.DataContext;
                                break;

                            case "source":
                            case "sender":
                                parameter.ParameterType = CallingParameterType.Sender;
                                break;

                            case "arg":
                            case "args":
                            case "eventarg":
                            case "eventargs":
                                parameter.ParameterType = CallingParameterType.Args;
                                break;

                            default:
                                parameter.ParameterType = CallingParameterType.Literal;
                                parameter.Literal       = tempArg;
                                break;
                            }

                            if (splitArgs.Length > 1 && parameter.ParameterType != CallingParameterType.Literal)
                            {
                                parameter.PropertyName = splitArgs[1];
                            }

                            parameters.Add(parameter);
                        }
                        else
                        {
                            parameters.Add(new CallingParameter
                            {
                                Literal       = tempArg,
                                ParameterType = CallingParameterType.Literal
                            });
                        }
                    }
                }
            }
            else
            {
                // TODO: logging
                //Logger.Error("There was a problem parsing the message string: " + callString, supplemental);
            }
        }
Esempio n. 5
0
 public object Visit(CallingParameter obj)
 {
     throw new NotImplementedException();
 }