Exemple #1
0
        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);
        }
Exemple #2
0
 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))
     {
     }
 }
Exemple #3
0
        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);
        }
Exemple #4
0
 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);
 }