public AutomatonSourceParser(ParserAutomaton automaton) { if (automaton == null) throw new ArgumentNullException(nameof(automaton)); Automaton = automaton; }
public GrammarCompilationResult(GrammarCompilationContext context, ParserAutomaton automaton) { CompilationContext = context; Automaton = automaton; }
private static ParserAutomaton CreateAutomaton(GrammarCompilationContext context) { var automaton = new ParserAutomaton(context.GrammarData.Grammar); foreach (var initialState in context.InitialStates) automaton.InitialStates.Add((GrammarDefinition)initialState.Key.Rule.Switch[0][0], initialState.Value.State); automaton.DefaultInitialState = context.InitialStates[context.GrammarData.DefaultAugmentedRoot].State; automaton.States.AddRange(context.States.Select(x => x.State)); return automaton; }
public void Serialize(Stream outputStream, ParserAutomaton automaton) { var writer = new BinaryWriter(outputStream); var context = new SerializerContext(automaton, writer); writer.Write((ushort)automaton.States.Count); writer.Write((ushort)automaton.DefaultInitialState.Id); writer.Write((byte)automaton.InitialStates.Count); foreach (var state in context.Automaton.InitialStates) WriteInitialStateEntry(writer, state); foreach (var state in context.Automaton.States) WriteState(context, state); }
public SerializerContext(ParserAutomaton automaton, BinaryWriter writer) { Writer = writer; Automaton = automaton; }
public DeserializerContext(Grammar grammar, BinaryReader reader) { Reader = reader; Automaton = new ParserAutomaton(grammar); }