コード例 #1
0
ファイル: Fluid.cs プロジェクト: TheAIBot/Bioly
        public static Block Parse(XmlNode node, DFG <Block> dfg, ParserInfo parserInfo)
        {
            string id     = ParseTools.ParseID(node);
            string output = ParseTools.ParseString(node, OUTPUT_FLUID_FIELD_NAME);

            Validator.CheckVariableName(id, output);
            parserInfo.AddVariable(id, VariableType.FLUID, output);
            XmlNode innerNode = node.GetInnerBlockNode(INPUT_FLUID_FIELD_NAME, parserInfo, new MissingBlockException(id, "Fluid is missing fluid definition blocks."));

            if (innerNode != null)
            {
                switch (innerNode.GetAttributeValue(Block.TYPE_FIELD_NAME))
                {
                case HeaterUsage.XML_TYPE_NAME:
                    return(HeaterUsage.CreateHeater(output, innerNode, dfg, parserInfo));

                case Mixer.XmlTypeName:
                    return(Mixer.CreateMixer(output, innerNode, dfg, parserInfo));

                case Union.XML_TYPE_NAME:
                    return(Union.CreateUnion(output, innerNode, dfg, parserInfo));

                default:
                    return(CreateFluid(output, innerNode, dfg, parserInfo));
                }
            }
            return(null);
        }
コード例 #2
0
        public Direct GetProgram(XmlNode currentProgramXml, ParserInfo parserInfo)
        {
            string            id          = ParseTools.ParseID(currentProgramXml);
            InlineProgramInfo programInfo = GetInlineProgramInfo(currentProgramXml, parserInfo);
            CDFG newProgram = ProgramCDFG.Copy();

            TransformCDFGToFunctionCDFG(newProgram, programInfo);
            TransformVariableNames(newProgram, programInfo, parserInfo.GetUniquePostFix());
            ChangeIDs(newProgram, id);

            //Add new variables that this program added
            programInfo.OutputsFromTo.ForEach(x => parserInfo.AddVariable(string.Empty, VariableType.FLUID, x.Value));
            DFG <Block> nextDFG = XmlParser.ParseNextDFG(currentProgramXml, parserInfo);



            DFG <Block> endDFG = newProgram.GetEndDFGInFirstScope();
            int         i      = newProgram.Nodes.FindIndex(x => x.dfg == endDFG);

            if (newProgram.Nodes[i].control == null)
            {
                newProgram.Nodes[i] = (new Direct(nextDFG), endDFG);
            }
            else
            {
                newProgram.Nodes[i] = (newProgram.Nodes[i].control.GetNewControlWithNewEnd(nextDFG), endDFG);
            }

            //merge the programs together nd return the link between then
            parserInfo.cdfg.AddCDFG(newProgram);

            return(new Direct(newProgram.StartDFG));
        }
コード例 #3
0
ファイル: WasteDeclaration.cs プロジェクト: TheAIBot/Bioly
        public static Block Parse(XmlNode node, ParserInfo parserInfo)
        {
            string id         = ParseTools.ParseID(node);
            string moduleName = ParseTools.ParseString(node, MODULE_NAME_FIELD_NAME);

            parserInfo.AddVariable(id, VariableType.WASTE, moduleName);

            return(new WasteDeclaration(moduleName, parserInfo.GetUniqueAnonymousName(), id));
        }
コード例 #4
0
ファイル: ImportVariable.cs プロジェクト: TheAIBot/Bioly
        public static Block Parse(XmlNode node, ParserInfo parserInfo, bool canBeScheduled)
        {
            string id           = ParseTools.ParseID(node);
            string variableName = ParseTools.ParseString(node, VARIABLE_FIELD_NAME);

            parserInfo.AddVariable(id, VariableType.NUMBER, variableName);

            return(new ImportVariable(variableName, parserInfo.GetUniqueAnonymousName(), id, canBeScheduled));
        }
コード例 #5
0
ファイル: DropletDeclaration.cs プロジェクト: TheAIBot/Bioly
        public static DropletDeclaration Parse(XmlNode node, ParserInfo parserInfo)
        {
            string id     = ParseTools.ParseID(node);
            string output = ParseTools.ParseString(node, INPUT_FLUID_FIELD_NAME);

            parserInfo.AddVariable(id, VariableType.FLUID, output);

            return(new DropletDeclaration(output, id));
        }
コード例 #6
0
ファイル: TestParseBlocks.cs プロジェクト: TheAIBot/Bioly
        public void ParseWasteBlock()
        {
            JSProgram program = new JSProgram();

            program.AddWasteSegment("a", "z", 1249, false);
            TestTools.ExecuteJS(program);

            XmlNode    node       = TestTools.GetWorkspace();
            ParserInfo parserInfo = new ParserInfo();

            parserInfo.EnterDFG();
            parserInfo.AddVariable("", VariableType.FLUID, "a");
            parserInfo.AddVariable("", VariableType.WASTE, "z");
            Block input = XmlParser.ParseBlock(node, new DFG <Block>(), parserInfo);

            Assert.AreEqual(0, parserInfo.ParseExceptions.Count, parserInfo.ParseExceptions.FirstOrDefault()?.Message);
            Assert.IsTrue(input is WasteUsage);
        }
コード例 #7
0
ファイル: InputDeclaration.cs プロジェクト: TheAIBot/Bioly
        public static InputDeclaration Parse(XmlNode node, ParserInfo parserInfo)
        {
            string id     = ParseTools.ParseID(node);
            float  amount = ParseTools.ParseFloat(node, parserInfo, id, INPUT_AMOUNT_FIELD_NAME);
            string output = ParseTools.ParseString(node, INPUT_FLUID_FIELD_NAME);

            parserInfo.AddVariable(id, VariableType.FLUID, output);

            return(new InputDeclaration(output, amount, id));
        }
コード例 #8
0
ファイル: TestParseBlocks.cs プロジェクト: TheAIBot/Bioly
        public void ParseMixerBlock()
        {
            JSProgram program = new JSProgram();

            program.AddMixerSegment("a", "b", 10, false, "c", 0, true);
            TestTools.ExecuteJS(program);

            XmlNode    node       = TestTools.GetWorkspace();
            ParserInfo parserInfo = new ParserInfo();

            parserInfo.EnterDFG();
            parserInfo.AddVariable("", VariableType.FLUID, "a");
            parserInfo.AddVariable("", VariableType.FLUID, "b");
            parserInfo.AddVariable("", VariableType.FLUID, "c");
            Mixer mixer = (Mixer)XmlParser.ParseBlock(node, null, parserInfo);

            Assert.AreEqual(0, parserInfo.ParseExceptions.Count, parserInfo.ParseExceptions.FirstOrDefault()?.Message);
            Assert.AreEqual("a", mixer.OutputVariable);
        }
コード例 #9
0
ファイル: TestParseBlocks.cs プロジェクト: TheAIBot/Bioly
        public void ParseHeaterBlock()
        {
            JSProgram program = new JSProgram();

            program.AddHeaterSegment("a", "z", 173, 39, "b", 29, false);
            TestTools.ExecuteJS(program);

            XmlNode    node       = TestTools.GetWorkspace();
            ParserInfo parserInfo = new ParserInfo();

            parserInfo.EnterDFG();
            parserInfo.AddVariable("", VariableType.FLUID, "b");
            parserInfo.AddVariable("", VariableType.HEATER, "z");
            HeaterUsage heater = (HeaterUsage)XmlParser.ParseBlock(node, null, parserInfo);

            Assert.AreEqual(0, parserInfo.ParseExceptions.Count, parserInfo.ParseExceptions.FirstOrDefault()?.Message);
            Assert.AreEqual("a", heater.OutputVariable);
            Assert.AreEqual(173, heater.Temperature);
            Assert.AreEqual(39, heater.Time);
        }
コード例 #10
0
        public static Block Parse(XmlNode node, DFG <Block> dfg, ParserInfo parserInfo)
        {
            string id     = ParseTools.ParseID(node);
            string output = ParseTools.ParseString(node, VARIABLE_FIELD_NAME);

            parserInfo.AddVariable(id, VariableType.NUMBER, output);

            VariableBlock operandBlock = ParseTools.ParseBlock <VariableBlock>(node, dfg, parserInfo, id, INPUT_VARIABLE_FIELD_NAME,
                                                                               new MissingBlockException(id, "Missing block to define the variables value."));

            dfg.AddNode(operandBlock);

            return(new SetNumberVariable(operandBlock, output, id));
        }
コード例 #11
0
        public static Block Parse(XmlNode node, DFG <Block> dfg, ParserInfo parserInfo)
        {
            string id        = ParseTools.ParseID(node);
            string arrayName = ParseTools.ParseString(node, ARRAY_NAME_FIELD_NAME);

            parserInfo.AddVariable(id, VariableType.NUMBER_ARRAY, arrayName);

            VariableBlock arrayLengthBlock = ParseTools.ParseBlock <VariableBlock>(node, dfg, parserInfo, id, ARRAY_LENGTH_FIELD_NAME,
                                                                                   new MissingBlockException(id, "Missing block which define the length of the array."));

            dfg.AddNode(arrayLengthBlock);

            return(new NumberArray(arrayName, arrayLengthBlock, id));
        }
コード例 #12
0
ファイル: TestParseBlocks.cs プロジェクト: TheAIBot/Bioly
        public void ParseFluidBlock()
        {
            JSProgram program = new JSProgram();

            program.AddFluidSegment("k", "a", 10, false);
            TestTools.ExecuteJS(program);

            XmlNode    node       = TestTools.GetWorkspace();
            ParserInfo parserInfo = new ParserInfo();

            parserInfo.EnterDFG();
            parserInfo.AddVariable("", VariableType.FLUID, "a");
            Fluid input = (Fluid)XmlParser.ParseBlock(node, new DFG <Block>(), parserInfo);

            Assert.AreEqual(0, parserInfo.ParseExceptions.Count, parserInfo.ParseExceptions.FirstOrDefault()?.Message);
        }
コード例 #13
0
ファイル: TestParseBlocks.cs プロジェクト: TheAIBot/Bioly
        public void ParseInputBlock()
        {
            JSProgram program = new JSProgram();

            program.AddInputBlock("a", 20);
            TestTools.ExecuteJS(program);

            XmlNode    node       = TestTools.GetWorkspace();
            ParserInfo parserInfo = new ParserInfo();

            parserInfo.EnterDFG();
            parserInfo.AddVariable("", VariableType.FLUID, "a");
            InputDeclaration input = (InputDeclaration)XmlParser.ParseBlock(node, null, parserInfo, true);

            Assert.AreEqual(0, parserInfo.ParseExceptions.Count, parserInfo.ParseExceptions.FirstOrDefault()?.Message);
            Assert.AreEqual("a", input.OutputVariable);
            Assert.AreEqual(20, input.Amount);
        }