public static ImmutableNodeReferer translateRecursiveInternal(Functional.ParseTreeElement entry, ImmutableNodeReferer parent) { if (entry.type == Functional.ParseTreeElement.EnumType.SCOPE) { ImmutableNodeReferer resultNode = ImmutableNodeReferer.makeBranch(); Functional.ScopeParseTreeElement castedEntry = (Functional.ScopeParseTreeElement)entry; foreach (Functional.ParseTreeElement iterationChildren in castedEntry.children) { ImmutableNodeReferer translatedNode = translateRecursiveInternal(iterationChildren, resultNode); resultNode.children = resultNode.children.Add(translatedNode); } return(resultNode); } else if (entry.type == Functional.ParseTreeElement.EnumType.IDENTIFIER) { Functional.IdentifierParseTreeElement castedEntry = (Functional.IdentifierParseTreeElement)entry; return(ImmutableNodeRefererManipulatorHelper.makeString(castedEntry.identifier)); } else if (entry.type == Functional.ParseTreeElement.EnumType.NUMBER) { Functional.NumberParseTreeElement castedEntry = (Functional.NumberParseTreeElement)entry; switch (castedEntry.numberType) { case Functional.NumberParseTreeElement.EnumNumberType.FLOAT: return(ImmutableNodeReferer.makeNonbranch(ValueNode.makeAtomic(Variant.makeFloat(castedEntry.valueFloat)))); case Functional.NumberParseTreeElement.EnumNumberType.INTEGER: return(ImmutableNodeReferer.makeNonbranch(ValueNode.makeAtomic(Variant.makeInt(castedEntry.valueInt)))); } throw new Exception("Internal error!"); // hard internal error } else if (entry.type == Functional.ParseTreeElement.EnumType.ARRAY) { // an array gets transated to an branch with array as the operation ImmutableNodeReferer resultNode = ImmutableNodeReferer.makeBranch(); resultNode.children = resultNode.children.Add(ImmutableNodeRefererManipulatorHelper.makeString("array")); // pseudo operation "array" which indicates an array Functional.ArrayParseTreeElement castedEntry = (Functional.ArrayParseTreeElement)entry; foreach (Functional.ParseTreeElement iterationChildren in castedEntry.children) { ImmutableNodeReferer translatedNode = translateRecursiveInternal(iterationChildren, resultNode); resultNode.children = resultNode.children.Add(translatedNode); } return(resultNode); } else { throw new Exception("Not supported parse node!"); } }
static void agentTest0() { ImmutableNodeReferer orginalArray = ImmutableNodeRefererManipulatorHelper.makeImmutableNodeRefererForArray(new List <Variant> { Variant.makeInt(5), Variant.makeInt(2), Variant.makeInt(7) }); StochasticBag stochasticBag = new StochasticBag(); stochasticBag.propabilities = new List <float> { 0.2f, 0.6f, 0.2f }; Random random = new Random(); for (int i = 0; i < 15; i++) { Console.WriteLine("choice={0}", stochasticBag.getValueByUniformRandomVariable((float)random.NextDouble())); // TODO< manipulate array and print to console > } int deb = 0; }