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); }
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); } }
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); } }
public object Visit(CallingParameter obj) { throw new NotImplementedException(); }