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); }