public static void TryDerive( [NotNull, ItemNotNull] List <Symbol> tape, [NotNull] GrammarType1 grammar, [NotNull] ITracker tracker, int target, [CanBeNull] Dictionary <GrammarRule1, bool> used ) { if (target == 1) { tracker.Track(new List <Symbol> { new Symbol("1") }, null); tape[0] = new Symbol("1"); return; } tape.TryDerive(grammar.Rules[1], tracker, used); for (int i = 0; i < target - 2; i++) { tape.TryDerive(grammar.Rules[2], tracker, used); } tape.TryDerive(grammar.Rules[3], tracker, used); tape.Derive(grammar, tracker, used); }
public static void Derive([NotNull, ItemNotNull] this List <Symbol> tape, [NotNull] GrammarType1 grammar, [NotNull] ITracker tracker, [CanBeNull] Dictionary <GrammarRule1, bool> used) { while (tape.TryDerive(grammar, tracker, used)) { } }
public static List <GrammarRule1> FindNotUsed(GrammarType1 grammar) { Dictionary <GrammarRule1, bool> used = new Dictionary <GrammarRule1, bool>(); int target = 0; string serialized = new ResourceLoader(ResourceNameBundle.UnrestrictedGrammar).Load(); foreach (var rule in grammar.Rules) { used.Add(rule, false); } for (int i = 2; i < 20; i++) { target = i; var tape = new List <Symbol> { grammar.Axiom }; var tracker = new TrackDerivationTracker(tape); GrammarExecution.Program.TryDerive(tape, grammar, tracker, target, used); } int count = 0; List <GrammarRule1> unUsedRules = new List <GrammarRule1>(); foreach (var key in used.Keys) { if (!used[key]) { unUsedRules.Add(key); count++; } } return(unUsedRules); }
private static bool TryDerive([NotNull, ItemNotNull] this List <Symbol> tape, [NotNull] GrammarType1 grammar, [NotNull] ITracker tracker, [CanBeNull] Dictionary <GrammarRule1, bool> used) { if (!grammar.Rules.Any(rule => TryDerive(tape, rule, tracker, used))) { return(false); } return(true); }