Beispiel #1
0
        public IStatement GenerateIf(FieldDefinition field, List <int> toStateIds, Epa epa, Dictionary <State, int> stateNumberMap)
        {
            var toStates = new List <State>();

            foreach (var kvp in stateNumberMap)
            {
                var id    = kvp.Value;
                var state = kvp.Key;
                if (toStateIds.Contains(id))
                {
                    toStates.Add(state);
                }
            }

            var conditions = GenerateStatesConditions(toStates);

            var stmt = new AssignmentGenerator().GenerateAssign(field, toStateIds[0]);

            for (var i = 1; i < toStateIds.Count; ++i)
            {
                stmt = new ConditionalStatement
                {
                    Condition   = conditions[i],
                    TrueBranch  = new AssignmentGenerator().GenerateAssign(field, toStateIds[i]),
                    FalseBranch = stmt
                };
            }
            return(stmt);
        }
Beispiel #2
0
        protected ISwitchCase GenerateSwitchCase(FieldDefinition field, int fromStateId, List <int> toStateIds)
        {
            Contract.Requires(field != null && toStateIds != null && toStateIds.Count > 0);

            var caseStmt = new SwitchCase
            {
                Expression = new CompileTimeConstant
                {
                    Type  = field.Type,
                    Value = fromStateId
                }
            };

            IStatement stmt;

            //Determinismo y no determinismo
            if (toStateIds.Count == 1)
            {
                stmt = new AssignmentGenerator().GenerateAssign(field, toStateIds.First());
            }
            else
            {
                stmt = new IfGenerator().GenerateIf(field, toStateIds, epa, stateNumberMap);
            }

            caseStmt.Body.Add(stmt);
            caseStmt.Body.Add(new BreakStatement());
            return(caseStmt);
        }