private void AddSimpleNext(string actual, string next, List <char> interval)
        {
            AbstractRule <char> roleChar      = new SimpleListIncludeRule <char>(1, interval);
            AbstractRule <char> roleEmpty     = new SimpleIncludeRule <char>(SYMBOLEMPTY, ValueDefaultTransitions);
            AbstractRule <char> roleExclusion = new SimpleListExclusionRule <char>(interval, alphabet.ToList(), ValueDefaultTransitions);

            Automa.AddTransition(actual, next, roleChar);
            Automa.AddTransition(actual, next, roleEmpty);
            Automa.AddTransition(actual, actual, roleExclusion);
            //Automa.AddTransition(actual, actual, roleEmpty);
            Automa.AddTransition(actual, next, roleExclusion);
        }
 private void AddSimpleNext(string actual, string next, List<char> interval)
 {
     AbstractRule<char> roleChar = new SimpleListIncludeRule<char>(1, interval);
     AbstractRule<char> roleEmpty = new SimpleIncludeRule<char>(SYMBOLEMPTY, ValueDefaultTransitions);
     AbstractRule<char> roleExclusion = new SimpleListExclusionRule<char>(interval, alphabet.ToList(), ValueDefaultTransitions);
     Automa.AddTransition(actual, next, roleChar);
     Automa.AddTransition(actual, next, roleEmpty);
     Automa.AddTransition(actual, actual, roleExclusion);
     //Automa.AddTransition(actual, actual, roleEmpty);
     Automa.AddTransition(actual, next, roleExclusion);
 }
        private void CreateAutoma()
        {
            ValueState value = new ValueState();
            RuleProductionState rule = new RuleProductionState();

            rule.Source = GrammarLine.VariableStart;
            rule.Destiny = GrammarLine.GetRules(rule.Source)[0].Destiny;
            rule.Id = GrammarLine.GetRules(rule.Source)[0].Id;
            rule.TypeName = GrammarLine.GetRules(rule.Source)[0].TypeName;

            rule.Pointer = 0;
            rule.Pertinence = 1;
            rule.Lookahead = Symbol.TapeFinal;
            rule.Parent = GrammarLine.GetRules(rule.Source)[0].Parent;
            value.Rules.Add(rule);
            State<Symbol> state = new State<Symbol>(0, "I000", 1, 0, Closure(value));
            FirstState = state;
            // Rules.AddRange(state.GetValue<ValueState>().Rules);

            Automa.States.Add(state);
            bool change = true;
            //  while (change)
            {
                change = false;

                for (int i = 0; i < Automa.States.Count; i++)
                {

                    var stateActualI = Automa.States[i];

                    SymbolList symbols = Grammar.Symbols;
                    for (int j = 0; j < symbols.Count; j++)
                    {

                        var symbolX = symbols[j];

                        var valStateI = stateActualI.GetValue<ValueState>();

                        var valueGoto = Goto(valStateI, symbolX);

                        if (valueGoto.Rules.Count > 0)
                        {
                            //var item = value.Rules
                            // foreach (var item in value.Rules)
                            {
                                state = Automa.States.FirstOrDefault(s => s.GetValue<ValueState>().Equals(valueGoto));
                                if (state == null)
                                {
                                    state = new State<Symbol>(-1, "Temp", 1, 0, valueGoto);
                                    state.Name = string.Format("I{0:000}", state.Id);
                                    Automa.States.Add(state);
                                }

                                //    Rules.AddRange(value.Rules);

                                Transition<Symbol> transition = new Transition<Symbol>();
                                transition.From = stateActualI;
                                stateActualI.Transitions.Add(transition);

                                transition.To = state;
                                var sir = new SimpleIncludeRule<Symbol>(symbolX, 1);
                                //  sir.Pertinence = item.Pertinence * Automa.States[i].GetValue<ValueState>().Rules[0].Pertinence;

                                transition.Rule = sir;

                                Automa.Transitions.Add(transition);

                                change = true;

                            }
                        }

                    }
                }

            }
        }
        private void CreateAutoma()
        {
            ValueState          value = new ValueState();
            RuleProductionState rule  = new RuleProductionState();

            rule.Source   = GrammarLine.VariableStart;
            rule.Destiny  = GrammarLine.GetRules(rule.Source)[0].Destiny;
            rule.Id       = GrammarLine.GetRules(rule.Source)[0].Id;
            rule.TypeName = GrammarLine.GetRules(rule.Source)[0].TypeName;

            rule.Pointer    = 0;
            rule.Pertinence = 1;
            rule.Lookahead  = Symbol.TapeFinal;
            rule.Parent     = GrammarLine.GetRules(rule.Source)[0].Parent;
            value.Rules.Add(rule);
            State <Symbol> state = new State <Symbol>(0, "I000", 1, 0, Closure(value));

            FirstState = state;
            // Rules.AddRange(state.GetValue<ValueState>().Rules);

            Automa.States.Add(state);
            bool change = true;
            //  while (change)
            {
                change = false;

                for (int i = 0; i < Automa.States.Count; i++)
                {
                    var stateActualI = Automa.States[i];

                    SymbolList symbols = Grammar.Symbols;
                    for (int j = 0; j < symbols.Count; j++)
                    {
                        var symbolX = symbols[j];

                        var valStateI = stateActualI.GetValue <ValueState>();

                        var valueGoto = Goto(valStateI, symbolX);

                        if (valueGoto.Rules.Count > 0)
                        {
                            //var item = value.Rules
                            // foreach (var item in value.Rules)
                            {
                                state = Automa.States.FirstOrDefault(s => s.GetValue <ValueState>().Equals(valueGoto));
                                if (state == null)
                                {
                                    state      = new State <Symbol>(-1, "Temp", 1, 0, valueGoto);
                                    state.Name = string.Format("I{0:000}", state.Id);
                                    Automa.States.Add(state);
                                }

                                //    Rules.AddRange(value.Rules);

                                Transition <Symbol> transition = new Transition <Symbol>();
                                transition.From = stateActualI;
                                stateActualI.Transitions.Add(transition);


                                transition.To = state;
                                var sir = new SimpleIncludeRule <Symbol>(symbolX, 1);
                                //  sir.Pertinence = item.Pertinence * Automa.States[i].GetValue<ValueState>().Rules[0].Pertinence;

                                transition.Rule = sir;

                                Automa.Transitions.Add(transition);

                                change = true;
                            }
                        }
                    }
                }
            }
        }