Exemplo n.º 1
0
        public Transition ClearConstant(List<State> newStates, Dictionary<string, Expression> constMapping, bool checkSelect)
        {
            ParallelDefinition[] newSelects = null;

            if (checkSelect && Selects != null)
            {
                newSelects = new ParallelDefinition[Selects.Length];
                for (int i = 0; i < Selects.Length; i++)
                {
                    newSelects[i] = newSelects[i].ClearConstant(constMapping);
                }
            }

            State newFrom = null, newTo = null;
            foreach (State state in newStates)
            {
                if (state.Name == FromState.Name)
                {
                    newFrom = state;
                }

                if (state.Name == ToState.Name)
                {
                    newTo = state;
                }
            }

            return new Transition(Event.ClearConstant(constMapping), newSelects, GuardCondition == null ? GuardCondition : GuardCondition.ClearConstant(constMapping), ProgramBlock == null ? ProgramBlock : ProgramBlock.ClearConstant(constMapping), newFrom, newTo);
        }
Exemplo n.º 2
0
 //string[] localvar,
 public PNTransition(Event e, ParallelDefinition[] selects, Expression guard, Expression assignment, PNPlace from, PNPlace to)
 {
     Event = e;
     Selects = selects;
     ProgramBlock = assignment;
     GuardCondition = guard;
     FromPNPlace = from;
     ToPNPlace = to;
 }
Exemplo n.º 3
0
 //string[] localvar,
 public Transition(Event e, ParallelDefinition[] selects, Expression Guard, Expression assignment, State from, State to)
 {
     Event = e;
     Selects = selects;
     ProgramBlock = assignment;
     //LocalVariables = localvar;
     GuardCondition = Guard;
     FromState = from;
     ToState = to;
 }
Exemplo n.º 4
0
        public PNTransition ClearConstant(List<PNPlace> newPNPlaces, Dictionary<string, Expression> constMapping, bool checkSelect)
        {
            ParallelDefinition[] newSelects = null;

            if (checkSelect && Selects != null)
            {
                newSelects = new ParallelDefinition[Selects.Length];
                for (int i = 0; i < Selects.Length; i++)
                    newSelects[i] = newSelects[i].ClearConstant(constMapping);
            }

            PNPlace newFrom = null, newTo = null;
            foreach (PNPlace PNPlace in newPNPlaces)
            {
                if (PNPlace.Name == FromPNPlace.Name)
                    newFrom = PNPlace;

                if (PNPlace.Name == ToPNPlace.Name)
                    newTo = PNPlace;
            }

            return new PNTransition(Event.ClearConstant(constMapping), newSelects, GuardCondition == null ? GuardCondition : GuardCondition.ClearConstant(constMapping), ProgramBlock == null ? ProgramBlock : ProgramBlock.ClearConstant(constMapping), newFrom, newTo);
        }
Exemplo n.º 5
0
        public List <ProcessBase> GetCountedProcess(SortedDictionary <string, Expression> environment)
        {
            Dictionary <string, Expression> constMapping;

            if (environment != null)
            {
                constMapping = new Dictionary <string, Expression>(environment);
            }
            else
            {
                constMapping = new Dictionary <string, Expression>();
            }


            //ProcessBase process = this.Process.ClearConstant(constMapping);
            List <ParallelDefinition> newDefinitions = new List <ParallelDefinition>();

            // bool hasVar = false;
            foreach (ParallelDefinition definition in Definitions)
            {
                ParallelDefinition newPD = definition.ClearConstant(constMapping);
                //if (newPD.HasVaraible)
                //{
                //    hasVar = true;
                //}
                newDefinitions.Add(newPD);
            }

            // System.Diagnostics.Debug.Assert(!hasVar);
            //if (hasVar)
            //{
            //    return new IndexInterleaveTemp(Process, newDefinitions);
            //}
            //else
            {
                List <ProcessBase> processes = new List <ProcessBase>(16);

                //List<string> avoidsVars = new List<string>();
                foreach (ParallelDefinition pd in newDefinitions)
                {
                    pd.DomainValues.Sort();
                }

                List <List <Expression> > list = new List <List <Expression> >();
                foreach (int v in newDefinitions[0].DomainValues)
                {
                    List <Expression> l = new List <Expression>(newDefinitions.Count);
                    l.Add(new IntConstant(v));
                    list.Add(l);
                }

                for (int i = 1; i < newDefinitions.Count; i++)
                {
                    List <List <Expression> > newList = new List <List <Expression> >();
                    List <int> domain = newDefinitions[i].DomainValues;

                    for (int j = 0; j < list.Count; j++)
                    {
                        foreach (int i1 in domain)
                        {
                            List <Expression> cList = new List <Expression>(list[j]);
                            cList.Add(new IntConstant(i1));
                            newList.Add(cList);
                        }
                    }
                    list = newList;
                }

                foreach (List <Expression> constants in list)
                {
                    Dictionary <string, Expression> constMappingNew = new Dictionary <string, Expression>();
                    for (int i = 0; i < constants.Count; i++)
                    {
                        Expression constant = constants[i];
                        constant.BuildVars();
                        constMappingNew.Add(newDefinitions[i].Parameter, constant);
                    }

                    ProcessBase newProcess = Process.ClearConstant(constMappingNew);
                    processes.Add(newProcess);
                }


                return(processes);
            }
        }
Exemplo n.º 6
0
        public ParallelDefinition ClearConstant(Dictionary <string, Expression> constMapping)
        {
            ParallelDefinition pd = new ParallelDefinition(Parameter, Token);

            try
            {
                if (LowerBound == null)
                {
                    foreach (Expression expression in Domain)
                    {
                        Expression newExp = expression.ClearConstant(constMapping);
                        if (!newExp.HasVar)
                        {
                            ExpressionValue val = EvaluatorDenotational.Evaluate(newExp, null);

                            if (val is IntConstant)
                            {
                                pd.Domain.Add(val);
                                pd.DomainValues.Add((val as IntConstant).Value);
                            }
                            else
                            {
                                throw new ParsingException("An integer value is expected, but not " + val, Token);
                            }
                        }
                        else
                        {
                            pd.Domain.Add(newExp);
                        }
                    }
                }
                else
                {
                    pd.LowerBound = LowerBound.ClearConstant(constMapping);
                    pd.UpperBound = UpperBound.ClearConstant(constMapping);

                    if (!pd.LowerBound.HasVar && !pd.UpperBound.HasVar)
                    {
                        ExpressionValue lower = EvaluatorDenotational.Evaluate(pd.LowerBound, null);
                        ExpressionValue upper = EvaluatorDenotational.Evaluate(pd.UpperBound, null);

                        if (lower is IntConstant && upper is IntConstant)
                        {
                            int low = (lower as IntConstant).Value;
                            int up  = (upper as IntConstant).Value;
                            if (low > up)
                            {
                                throw new ParsingException("The variable range's starting value " + low + " should be smaller than ending value" + up + ".", Token);
                            }
                            else
                            {
                                pd = new ParallelDefinition(Parameter, Token);
                                for (int i = low; i <= up; i++)
                                {
                                    pd.Domain.Add(new IntConstant(i));
                                    pd.DomainValues.Add(i);
                                }
                            }
                        }
                        else
                        {
                            throw new ParsingException("Integers value are expected, but not " + lower + " and " + upper, Token);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw new ParsingException(ex.Message, Token);
            }
            return(pd);
        }
Exemplo n.º 7
0
        public ParallelDefinition ClearConstant(Dictionary<string, Expression> constMapping)
        {
            ParallelDefinition pd = new ParallelDefinition(Parameter, Token);

            try
            {
                if (LowerBound == null)
                {
                    foreach (Expression expression in Domain)
                    {
                        Expression newExp = expression.ClearConstant(constMapping);
                        if (!newExp.HasVar)
                        {
                            ExpressionValue val = EvaluatorDenotational.Evaluate(newExp, null);

                            if (val is IntConstant)
                            {
                                pd.Domain.Add(val);
                                pd.DomainValues.Add((val as IntConstant).Value);
                            }
                            else
                            {
                                throw new ParsingException("An integer value is expected, but not " + val, Token);
                            }
                        }
                        else
                        {
                            pd.Domain.Add(newExp);
                        }
                    }
                }
                else
                {
                    pd.LowerBound = LowerBound.ClearConstant(constMapping);
                    pd.UpperBound = UpperBound.ClearConstant(constMapping);

                    if (!pd.LowerBound.HasVar && !pd.UpperBound.HasVar)
                    {
                        ExpressionValue lower = EvaluatorDenotational.Evaluate(pd.LowerBound, null);
                        ExpressionValue upper = EvaluatorDenotational.Evaluate(pd.UpperBound, null);

                        if (lower is IntConstant && upper is IntConstant)
                        {
                            int low = (lower as IntConstant).Value;
                            int up = (upper as IntConstant).Value;
                            if (low > up)
                            {
                                throw new ParsingException("The variable range's starting value " + low + " should be smaller than ending value" + up + ".", Token);
                            }
                            else
                            {
                                pd = new ParallelDefinition(Parameter, Token);
                                for (int i = low; i <= up; i++)
                                {
                                    pd.Domain.Add(new IntConstant(i));
                                    pd.DomainValues.Add(i);
                                }
                            }
                        }
                        else
                        {
                            throw new ParsingException("Integers value are expected, but not " + lower + " and " + upper, Token);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw new ParsingException(ex.Message, Token);
            }
            return pd;
        }