public GrammarCompilationContext(GrammarData grammarData) { if (grammarData == null) throw new ArgumentNullException(nameof(grammarData)); GrammarData = grammarData; States= new List<IntermediateParserState>(); Conflicts = new List<GrammarReductionConflict>(); InitialStates = new Dictionary<GrammarDefinition, IntermediateParserState>(); }
private static void TestSerializer(Grammar grammar) { var data = new GrammarData(grammar); var serializer = new ParserAutomatonSerializer(data); var result = GrammarCompiler.Compile(data); using (var stream = new MemoryStream()) { serializer.Serialize(stream, result.Automaton); stream.Position = 0; var newAutomaton = serializer.Deserialize(stream); Assert.AreEqual(result.Automaton.DefaultInitialState.Id, newAutomaton.DefaultInitialState.Id); Assert.AreEqual(result.Automaton.States.Count, newAutomaton.States.Count); for (int index = 0; index < result.Automaton.States.Count; index++) { var expectedState = result.Automaton.States[index]; var actualState = newAutomaton.States[index]; ValidateState(expectedState, actualState); } } }
public static GrammarCompilationResult Compile(GrammarData grammarData) { if (grammarData == null) throw new ArgumentNullException(nameof(grammarData)); var context = new GrammarCompilationContext(grammarData); CreateLr0States(context); ConstructAugmentedGrammar(context); ComputeLookaheads(context); PlaceReduceActions(context); var automaton = CreateAutomaton(context); var result = new GrammarCompilationResult(context, automaton); return result; }
public ParserAutomatonSerializer(GrammarData data) { if (data == null) throw new ArgumentNullException(nameof(data)); Data = data; }