public static void CorrectFindLessAndEqualAndGreateSets_WhenG31() { var grammar = GrammarParser.Parse("S aFSb", "S c", "F Fb", "F b"); var precedence = new GrammarPrecedence(grammar); precedence.Less.Select(p => (p.Item1.Value, p.Item2.Value)) .Should() .BeEquivalentTo(('a', 'F'), ('a', 'b'), ('F', 'a'), ('F', 'c'), ('^', 'S'), ('^', 'a'), ('^', 'c')); precedence.Equal.Select(p => (p.Item1.Value, p.Item2.Value)) .Should() .BeEquivalentTo(('a', 'F'), ('F', 'S'), ('S', 'b'), ('F', 'b')); precedence.Greater.Select(p => (p.Item1.Value, p.Item2.Value)) .Should() .BeEquivalentTo(('b', 'a'), ('b', 'c'), ('b', 'b'), ('c', 'b'), ('S', '$'), ('b', '$'), ('c', '$')); }
static void Main(string[] args) { if (args.Length != 2) { Console.WriteLine($"FormalGrammar.exe [in-filename] [out-filename]"); return; } var(rules, strings, ntOrder) = ReadInput(args[0]); var grammar = GrammarParser.Parse(rules); var grammarPrecedence = new GrammarPrecedence(grammar); var view = new GrammarPrecedenceView(s => OrderSymbols(s, ntOrder)); var table = view.ToTable(grammarPrecedence); var analyzer = new GrammarAnalyzer(grammarPrecedence); var type = analyzer.IsSimplePrecedence ? "S" : (analyzer.IsWeakPrecedence ? "W" : "N"); var analyzings = analyzer.IsWeakPrecedence ? strings.Select(s => AnalyzeString(analyzer, s)) : new List <string>(); File.WriteAllText(args[1], $"{table}\r\n{type}\r\n\r\n{string.Join("\r\n", analyzings)}", Encoding.UTF8); }