Ejemplo n.º 1
0
        private Port ScanInstantiate()
        {
            tokenizer.Match(TokenTypes.InstantiateKeyword, "instantiate");
            IEntity entity = ScanEntity();

            Signal[] inputs;  //= new Signal[entity.InputSignals.Length];
            Signal[] outputs; // = new Signal[entity.OutputSignals.Length];
            Bus[]    buses;   // = new Bus[entity.Buses.Length];
            if (tokenizer.LookaheadFistToken.Text == "in")
            {
                tokenizer.Match(TokenTypes.TextIdentifier, "in");
                if (tokenizer.LookaheadToken(1).IsType(TokenTypes.Association))
                {
                    List <SignalAssociation> associations = ScanSignalExpressionAssociationList();
                    inputs = new Signal[entity.InputSignals.Length];
                    foreach (SignalAssociation sa in associations)
                    {
                        inputs[Array.IndexOf <string>(entity.InputSignals, sa.Label)] = sa.Association;
                    }
                }
                else
                {
                    List <Signal> associations = ScanSignalExpressionList();
                    inputs = associations.ToArray();
                }
            }
            else
            {
                inputs = new Signal[entity.InputSignals.Length];
            }
            if (tokenizer.LookaheadFistToken.Text == "out")
            {
                tokenizer.Match(TokenTypes.TextIdentifier, "out");
                if (tokenizer.LookaheadToken(1).IsType(TokenTypes.Association))
                {
                    List <SignalAssociation> associations = ScanSignalAssociationList();
                    outputs = new Signal[entity.OutputSignals.Length];
                    foreach (SignalAssociation sa in associations)
                    {
                        outputs[Array.IndexOf <string>(entity.OutputSignals, sa.Label)] = sa.Association;
                    }
                }
                else
                {
                    List <Signal> associations = ScanSignalList();
                    outputs = associations.ToArray();
                }
            }
            else
            {
                outputs = new Signal[entity.OutputSignals.Length];
            }
            if (tokenizer.LookaheadFistToken.Text == "bus")
            {
                tokenizer.Match(TokenTypes.TextIdentifier, "bus");
                if (tokenizer.LookaheadToken(1).IsType(TokenTypes.Association))
                {
                    List <BusAssociation> associations = ScanBusAssociationList();
                    buses = new Bus[entity.Buses.Length];
                    foreach (BusAssociation ba in associations)
                    {
                        buses[Array.IndexOf <string>(entity.Buses, ba.Label)] = ba.Association;
                    }
                }
                else
                {
                    List <Bus> associations = ScanBusList();
                    buses = associations.ToArray();
                }
            }
            else
            {
                buses = new Bus[entity.Buses.Length];
            }
            Port port = entity.InstantiatePort(inputs, outputs, buses);

            system.AddPortTree(port, false, false);
            return(port);
        }