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