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
}