예제 #1
0
        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!");
            }
        }
예제 #2
0
        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;
        }