public SerializedATN(OutputModelFactory factory, ATN atn, IList <string> ruleNames) : base(factory) { List <int> data = ATNSerializer.GetSerialized(atn, ruleNames); serialized = new List <string>(data.Count); foreach (int c in data) { string encoded = factory.GetTarget().EncodeIntAsCharEscape(c == -1 ? char.MaxValue : c); serialized.Add(encoded); } //System.Console.WriteLine(ATNSerializer.GetDecoded(factory.GetGrammar(), atn)); }
/** Derive a new parser from an old one that has knowledge of the grammar. * The Grammar object is used to correctly compute outer alternative * numbers for parse tree nodes. A parser of the same type is created * for subclasses of {@link ParserInterpreter}. */ public static ParserInterpreter DeriveTempParserInterpreter(Grammar g, Parser originalParser, ITokenStream tokens) { ParserInterpreter parser; if (originalParser is ParserInterpreter) { Type c = originalParser.GetType(); try { parser = (ParserInterpreter)Activator.CreateInstance(originalParser.GetType(), g, originalParser.Atn, originalParser.InputStream); } catch (Exception e) { throw new ArgumentException("can't create parser to match incoming " + c.Name, e); } } else { // must've been a generated parser char[] serializedAtn = ATNSerializer.GetSerializedAsChars(originalParser.Atn, originalParser.RuleNames); ATN deserialized = new ATNDeserializer().Deserialize(serializedAtn); parser = new ParserInterpreter(originalParser.GrammarFileName, originalParser.Vocabulary, originalParser.RuleNames, deserialized, tokens); } parser.SetInputStream(tokens); // Make sure that we don't get any error messages from using this temporary parser parser.ErrorHandler = new BailErrorStrategy(); parser.RemoveErrorListeners(); parser.RemoveParseListeners(); parser.Interpreter.PredictionMode = PredictionMode.LlExactAmbigDetection; return(parser); }