/// <summary> /// Parse the fragment of the source code already given. /// </summary> /// <param name="parser"></param> /// <param name="tokenStream"></param> private static CstNode ParseFragment(TParser parser, CommonTokenStream tokenStream) { var builder = new CstBuilderForAntlr3WithMemorizingError( tokenStream, parser.TokenNames); parser.TreeAdaptor = builder; tokenStream.Mark(); var methodInfos = parser.GetType().GetMethods(BindingFlags.Public | BindingFlags.Instance); foreach (var methodInfo in methodInfos) { if (methodInfo.ReturnType.IsSubclassOf(typeof(ParserRuleContext)) && methodInfo.GetParameters().Length == 0) { builder.Initialize(); parser.Reset(); var ret = methodInfo.Invoke(parser, new object[0]); if (!builder.HasErrors) { return(builder.FinishParsing((CstNode)ret)); } } } throw builder.LastException; }