private EnableLogging ( IParserLogger logger ) : void | ||
logger | IParserLogger | |
return | void |
private void ParserLoggingTest() { #if DEBUG string source = "def foo(a); end"; var sourceUnit = Context.CreateSnippet(source, SourceCodeKind.Statements); var options = new RubyCompilerOptions(); string temp = Path.Combine(Path.GetTempPath(), "RubyParser"); Console.WriteLine("> see {0}", temp); Directory.CreateDirectory(temp); Parser parser = new Parser(); using (TextWriter writer = File.CreateText(Path.Combine(temp, "default.log"))) { DefaultParserLogger.Attach(parser, writer); parser.Parse(sourceUnit, options, ErrorSink.Null); } using (TextWriter writer = File.CreateText(Path.Combine(temp, "tables.csv"))) { parser.DumpTables(writer); } using (TextWriter writer = File.CreateText(Path.Combine(temp, "productions.txt"))) { for (int i = 0; i < parser.Rules.Length; i++) { writer.WriteLine("{0}\t{1}", i, parser.RuleToString(i)); } } parser = new Parser(); using (TextWriter writer = File.CreateText(Path.Combine(temp, "productions.txt"))) { for (int i = 0; i < parser.Rules.Length; i++) { writer.WriteLine("{0}\t{1}", i, parser.RuleToString(i)); } } using (TextWriter writer = File.CreateText(Path.Combine(temp, "second_order.log"))) { parser.EnableLogging(new CoverageParserLogger(parser, writer)); parser.Parse(sourceUnit, options, ErrorSink.Null); } #endif }
public static void Attach(Parser/*!*/ parser, TextWriter/*!*/ output) { parser.EnableLogging(new DefaultParserLogger(parser, 1, output)); }
private void DumpFile(string/*!*/ path) { _log.WriteLine(path); try { string fullPath = Path.GetFullPath(path); string root = Path.GetPathRoot(fullPath); string outputPath = Path.ChangeExtension(Path.Combine(_targetDir, fullPath.Substring(root.Length).TrimEnd('\'', '/')), ".txt"); Directory.CreateDirectory(Path.GetDirectoryName(outputPath)); using (TextWriter output = File.CreateText(outputPath)) { output.WriteLine(fullPath); output.WriteLine(); output.WriteLine("Tokens:"); output.WriteLine(); ErrorLog errors = new ErrorLog(); Parser parser = new Parser(); parser.TokenSink = delegate(Tokens token, SourceSpan span) { DumpTokenDetail(output, parser.Tokenizer, token); }; if (_logProductions) { #if DEBUG parser.EnableLogging(new CoverageParserLogger(parser, _parserLog)); #endif } _currentSourceFile = path; SourceUnitTree ast = null; try { ast = parser.Parse(_context.CreateFileUnit(path), new RubyCompilerOptions(), errors); } catch (Exception e) { WriteException(e.ToString()); } output.WriteLine(); if (errors.ErrorCount + errors.FatalErrorCount + errors.WarningCount > 0) { output.WriteLine(); output.WriteLine("Errors:"); foreach (string error in errors.Errors) { output.WriteLine(error); } } else { Debug.Assert(ast != null); DumpRegularExpressions(ast); } output.WriteLine("."); } } catch (Exception e) { _log.WriteLine("!{0}", e.Message); } finally { _currentSourceFile = null; _regexLog.Flush(); _parserLog.Flush(); } }