private bool Iterate(int pos, OclParser.PropertyCallContext context) { if (((context.propertyCallParameters().declarator() == null) && (pos > 0)) || pos == context.propertyCallParameters().declarator().NAME().Length) { return(Interpreter.VisitExpression(context.propertyCallParameters().actualParameterList().expression()[0])); } var varStack = new Dictionary <string, Result>(); Vars.Add(varStack); string key = "self"; if (context.propertyCallParameters().declarator() != null) { key = context.propertyCallParameters().declarator().NAME()[pos].GetText(); } foreach (var val in (CollectionResult)GlobalResult) { varStack[key] = val; if (!this.Iterate(pos + 1, context)) { Vars.RemoveAt(Vars.Count - 1); return(false); } } Vars.RemoveAt(Vars.Count - 1); return(true); }
public override Result Process(OclParser.PropertyCallContext context) { var sourceString = (StringResult)GlobalResult; var concatString = (StringResult)Calculator.VisitExpression(context.propertyCallParameters().actualParameterList().expression()[0]); return(new StringResult(sourceString.GetValue() + concatString.GetValue())); }
public override Result Process(OclParser.PropertyCallContext context) { var start = (DoubleResult)Calculator.VisitExpression( context.propertyCallParameters().actualParameterList().expression()[0]); var end = (DoubleResult)Calculator.VisitExpression( context.propertyCallParameters().actualParameterList().expression()[1]); return(new StringResult(((StringResult)GlobalResult).GetValue().Substring((int)start.GetValue() - 1, (int)(end.GetValue() - start.GetValue() + 1)))); }
public Result LaunchOperation(string name, OclParser.PropertyCallContext context) { foreach (var operation in this.operations) { if (operation.GetName() == name) { return(operation.Process(context)); } } return(null); }
public override Result Process(OclParser.PropertyCallContext context) { switch (GlobalResult) { case CollectionResult objects: return(new IntResult(objects.Count())); case StringResult s: return(new IntResult(s.GetValue().Length)); } return(null); }
public override Result Process(OclParser.PropertyCallContext context) { CollectionResult newElements = (CollectionResult)GlobalResult; foreach (Result val in newElements.ToList()) { GlobalResult = val; newElements.Remove(val); newElements.Add(Calculator.VisitExpression(context.propertyCallParameters().actualParameterList().expression()[0])); } return(newElements); }
public override Result Process(OclParser.PropertyCallContext context) { CollectionResult filteredElements = (CollectionResult)GlobalResult; Dictionary <string, Result> varsStack = new Dictionary <string, Result>(); Vars.Add(varsStack); foreach (Result val in filteredElements.ToList()) { varsStack["self"] = val; if (!Interpreter.VisitExpression(context.propertyCallParameters().actualParameterList().expression()[0])) { filteredElements.Remove(val); } } Vars.RemoveAt(Vars.Count - 1); return(filteredElements); }
public override Result Process(OclParser.PropertyCallContext context) { var varStack = new Dictionary <string, Result>(); Vars.Add(varStack); Result returnValue = null; foreach (var val in (CollectionResult)GlobalResult) { varStack["self"] = val; if (Interpreter.VisitExpression(context.propertyCallParameters().actualParameterList().expression()[0])) { returnValue = val; break; } } Vars.RemoveAt(Vars.Count - 1); return(returnValue); }
public override Result Process(OclParser.PropertyCallContext context) { var varStack = new Dictionary <string, Result>(); Vars.Add(varStack); string key = "self"; key = context.propertyCallParameters().declarator().NAME()[0].GetText(); string accName = context.propertyCallParameters().declarator().NAME()[1].GetText(); Result accumulator = Calculator.VisitExpression(context.propertyCallParameters().declarator().expression()); varStack[accName] = accumulator; foreach (var val in (CollectionResult)GlobalResult) { varStack[key] = val; varStack[accName] = Calculator.VisitExpression(context.propertyCallParameters().actualParameterList().expression()[0]); } accumulator = varStack[accName]; Vars.RemoveAt(Vars.Count - 1); return(accumulator); }
public override Result Process(OclParser.PropertyCallContext context) { return(new BoolResult(this.Iterate(0, context))); }
public override Result Process(OclParser.PropertyCallContext context) { IElement element = Model.FindElement(((StringResult)GlobalResult).GetValue()); return(new CollectionResult(Model.Elements.Where(x => x.Class == element).ToList <object>())); }
public override Result Process(OclParser.PropertyCallContext context) { return(new IntResult(int.Parse(((StringResult)GlobalResult).GetValue()))); }
public override Result Process(OclParser.PropertyCallContext context) { Result value = Calculator.VisitExpression(context.propertyCallParameters().actualParameterList().expression()[0]); return(new DoubleResult(Math.Max(((DoubleResult)GlobalResult).GetValue(), ((DoubleResult)value).GetValue()))); }
/// <summary> /// Visit a parse tree produced by <see cref="OclParser.propertyCall"/>. /// <para> /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/> /// on <paramref name="context"/>. /// </para> /// </summary> /// <param name="context">The parse tree.</param> /// <return>The visitor result.</return> public virtual Result VisitPropertyCall([NotNull] OclParser.PropertyCallContext context) { return(VisitChildren(context)); }
public override Result Process(OclParser.PropertyCallContext context) { return(new DoubleResult(Math.Floor(((DoubleResult)GlobalResult).GetValue()))); }
public override Result VisitPropertyCall([NotNull] OclParser.PropertyCallContext context) { if (context.propertyCallParameters() != null) { Result result = this.launcher.LaunchOperation(context.pathName().GetText(), context); if (result != null) { return(result); } Dictionary <string, Result> stack = new Dictionary <string, Result>(); List <string> names = this.funcs[context.pathName().GetText()].Param; OclParser.ExpressionContext contextFunc = this.funcs[context.pathName().GetText()].Context; for (int i = 0; i < names.Count; i++) { stack[names[i]] = this.VisitExpression(context.propertyCallParameters().actualParameterList().expression()[i]); } this.vars.Add(stack); result = this.VisitExpression(contextFunc); this.vars.RemoveAt(this.vars.Count - 1); return(result); } else if (context.Parent is OclParser.PostfixExpressionContext expressionContext) { string element = expressionContext.primaryExpression().GetText(); if (element != "self") { this.Element = this.Model.FindElement(element); } var old = this.Element; if (context.NUMBER() != null) { IElement parent = this.Element; for (int i = 0; i < this.Depth - int.Parse(context.NUMBER().GetText()); i++) { parent = parent.Class; } this.Element = parent; } IAttribute attr = this.Element.Attributes.First(x => x.Name == context.pathName().GetText()); this.Element = old; switch (attr.Kind) { case AttributeKind.Boolean: return(new BoolResult(bool.Parse(attr.StringValue))); case AttributeKind.String: return(new StringResult(attr.StringValue)); case AttributeKind.Int: return(new IntResult(int.Parse(attr.StringValue))); case AttributeKind.Double: return(new DoubleResult(double.Parse(attr.StringValue))); } return(new StringResult(this.Element.Attributes.First(x => x.Name == context.pathName().GetText()).StringValue)); } return(this.VisitPathName(context.pathName())); }
public override Result Process(OclParser.PropertyCallContext context) { return(new StringResult(((StringResult)GlobalResult).GetValue().ToLower())); }