private void OnInitialize() { m_lexicon = new Lexicon(); OnDefineLexer(m_lexicon, m_triviaTokens); m_scannerInfo = OnCreateScannerInfo(); var parser = OnDefineParser(); if (parser == null) { throw new InvalidOperationException("Parser not defined"); } m_parser = parser.SuffixedBy(Parsers.Eos()); m_context = new ParserContext(m_errorManager, m_unexpectedTokenErrorId, m_missingTokenErrorId); OnDefineParserErrors(m_errorManager); m_parserRunner = new ParserRunner <T>(m_parser, m_context); m_scannerBuilder = new ForkableScannerBuilder(m_scannerInfo); m_scannerBuilder.SetTriviaTokens(m_triviaTokens.Select(t => t.Index).ToArray()); m_scannerBuilder.ErrorManager = m_errorManager; m_scannerBuilder.RecoverErrors = true; m_scannerBuilder.LexicalErrorId = m_lexicalErrorId; m_isInitialized = true; }