Skip to content

Commit

Permalink
Add in file name for multiple file parsing results in trtext.
Browse files Browse the repository at this point in the history
  • Loading branch information
kaby76 committed Sep 15, 2024
1 parent eb68e1e commit 1835dde
Show file tree
Hide file tree
Showing 11 changed files with 70 additions and 80 deletions.
72 changes: 39 additions & 33 deletions src/ParseTreeEditing/UnvParseTreeDOM/TreeOutput.cs
Original file line number Diff line number Diff line change
@@ -1,36 +1,44 @@
using Antlr4.Runtime;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection.Emit;
using System.Text;

namespace ParseTreeEditing.UnvParseTreeDOM;

public class TreeOutput
{
private static int changed = 0;
private static bool first_time = true;
private int changed = 0;
private bool first_time = true;
private StringBuilder sb;
private Lexer lexer;
private Parser parser;
private string prefix;

public static StringBuilder OutputTree(UnvParseTreeNode tree, Lexer lexer, Parser parser)
public TreeOutput(Lexer lexer, Parser parser, string prefix = "")
{
changed = 0;
first_time = true;
var sb = new StringBuilder();
ParenthesizedAST(tree, sb, lexer, parser);
sb = new StringBuilder();
this.lexer = lexer;
this.parser = parser;
this.prefix = prefix;
}

public StringBuilder OutputTree(UnvParseTreeNode tree)
{
ParenthesizedAST(tree);
return sb;
}

private static void ParenthesizedAST(UnvParseTreeNode tree, StringBuilder sb, Lexer lexer, Parser parser, int level = 0)
private void ParenthesizedAST(UnvParseTreeNode tree, int level = 0)
{
// Antlr always names a non-terminal with first letter lowercase,
// but renames it when creating the type in C#. So, remove the prefix,
// lowercase the first letter, and remove the trailing "Context" part of
// the name. Saves big time on output!
if (tree is UnvParseTreeText t)
{
StartLine(sb, level);
StartLine(level);
sb.Append(
"( "
+ " text:'" + PerformEscapes(t.Data) + "'"
Expand All @@ -46,7 +54,7 @@ private static void ParenthesizedAST(UnvParseTreeNode tree, StringBuilder sb, Le
}
else if (tree is UnvParseTreeAttr a)
{
StartLine(sb, level);
StartLine(level);
sb.Append("( Attribute " + a.Name as string);
sb.Append(" Value '");
sb.Append(PerformEscapes(a.StringValue));
Expand All @@ -62,7 +70,7 @@ private static void ParenthesizedAST(UnvParseTreeNode tree, StringBuilder sb, Le
{
var x = e;
var name = e.LocalName;
StartLine(sb, level);
StartLine(level);
sb.Append(
"( " + name
);
Expand All @@ -71,7 +79,7 @@ private static void ParenthesizedAST(UnvParseTreeNode tree, StringBuilder sb, Le
for (int i = 0; tree.ChildNodes != null && i < tree.ChildNodes.Length; ++i)
{
var c = tree.ChildNodes.item(i);
ParenthesizedAST(c as UnvParseTreeNode, sb, lexer, parser, level + 1);
ParenthesizedAST(c as UnvParseTreeNode, level + 1);
}
if (level == 0)
{
Expand All @@ -81,12 +89,13 @@ private static void ParenthesizedAST(UnvParseTreeNode tree, StringBuilder sb, Le
}
}

private static void StartLine(StringBuilder sb, int level = 0)
private void StartLine(int level = 0)
{
if (changed - level >= 0)
{
if (!first_time)
{
sb.Append(prefix);
for (int j = 0; j < level; ++j) sb.Append(" ");
for (int k = 0; k < 1 + changed - level; ++k) sb.Append(") ");
sb.AppendLine();
Expand All @@ -95,6 +104,7 @@ private static void StartLine(StringBuilder sb, int level = 0)
first_time = false;
}
changed = level;
sb.Append(prefix);
for (int j = 0; j < level; ++j) sb.Append(" ");
}

Expand Down Expand Up @@ -122,20 +132,18 @@ public static string PerformEscapes(string s)
return new_s.ToString();
}

public static StringBuilder OutputTreeAntlrStyle(UnvParseTreeNode tree, Lexer lexer, Parser parser)
public StringBuilder OutputTreeAntlrStyle(UnvParseTreeNode tree)
{
changed = 0;
first_time = true;
var sb = new StringBuilder();
AntlrParenthesizedAST(tree, sb, lexer, parser);
sb.Append(prefix);
AntlrParenthesizedAST(tree);
return sb;
}

private static void AntlrParenthesizedAST(UnvParseTreeNode tree, StringBuilder sb, Lexer lexer, Parser parser, int level = 0)
private void AntlrParenthesizedAST(UnvParseTreeNode tree, int level = 0)
{
if (tree is UnvParseTreeText t)
{
sb.Append((!first_time ? " ": "") + "\"" + PerformEscapes(t.Data) + "\"");
sb.Append((!first_time ? " " : "") + "\"" + PerformEscapes(t.Data) + "\"");
first_time = false;
return;
}
Expand All @@ -153,31 +161,28 @@ private static void AntlrParenthesizedAST(UnvParseTreeNode tree, StringBuilder s
for (int i = 0; tree.ChildNodes != null && i < tree.ChildNodes.Length; ++i)
{
var c = tree.ChildNodes.item(i);
AntlrParenthesizedAST(c as UnvParseTreeNode, sb, lexer, parser, level + 1);
AntlrParenthesizedAST(c as UnvParseTreeNode, level + 1);
}
sb.Append(")");
}

public static StringBuilder OutputTreeIndentStyle(UnvParseTreeNode tree, Lexer lexer, Parser parser)
public StringBuilder OutputTreeIndentStyle(UnvParseTreeNode tree)
{
changed = 0;
first_time = true;
var sb = new StringBuilder();
IndentAST(tree, sb, lexer, parser);
IndentAST(tree);
return sb;
}

public static void IndentAST(UnvParseTreeNode tree, StringBuilder sb, Lexer lexer, Parser parser, int level = 0)
public void IndentAST(UnvParseTreeNode tree, int level = 0)
{
if (tree is UnvParseTreeText t)
{
IndentStartLine(sb, level);
IndentStartLine(level);
sb.Append("\"" + PerformEscapes(t.Data) + "\"");
sb.AppendLine();
}
else if (tree is UnvParseTreeAttr a)
{
IndentStartLine(sb, level);
IndentStartLine(level);
sb.Append("Attribute " + a.Name as string);
sb.Append(" Value '");
sb.Append(PerformEscapes(a.StringValue));
Expand All @@ -193,14 +198,14 @@ public static void IndentAST(UnvParseTreeNode tree, StringBuilder sb, Lexer lexe
{
var x = e;
var name = e.LocalName;
IndentStartLine(sb, level);
IndentStartLine(level);
sb.Append(name);
sb.AppendLine();
}
for (int i = 0; tree.ChildNodes != null && i < tree.ChildNodes.Length; ++i)
{
var c = tree.ChildNodes.item(i);
IndentAST(c as UnvParseTreeNode, sb, lexer, parser, level + 1);
IndentAST(c as UnvParseTreeNode, level + 1);
}
if (level == 0)
{
Expand All @@ -209,14 +214,15 @@ public static void IndentAST(UnvParseTreeNode tree, StringBuilder sb, Lexer lexe
}
}

private static void IndentStartLine(StringBuilder sb, int level = 0)
private void IndentStartLine(int level = 0)
{
if (changed - level >= 0)
{
changed = 0;
first_time = false;
}
changed = level;
sb.Append(prefix);
for (int j = 0; j < level; ++j) sb.Append(" ");
}

Expand Down
2 changes: 1 addition & 1 deletion src/tranalyze/Command.cs
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ public void Execute(Config config)
if (config.Verbose)
{
foreach (var n in trees)
System.Console.WriteLine(TreeOutput.OutputTree(n, lexer, parser).ToString());
System.Console.WriteLine(new TreeOutput(lexer, parser).OutputTree(n).ToString());
}
AnalyzeDoc(trees);
}
Expand Down
2 changes: 1 addition & 1 deletion src/trclonereplace/Command.cs
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ public void Execute(Config config)
if (config.Verbose)
{
foreach (var n in trees)
System.Console.WriteLine(TreeOutput.OutputTree(n, lexer, parser).ToString());
System.Console.WriteLine(new TreeOutput(lexer, parser).OutputTree(n).ToString());
}

/* Step 1: Find all parser symbols on the right hand side that match,
Expand Down
2 changes: 1 addition & 1 deletion src/trconvert/Command.cs
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ public void Execute(Config config)
if (config.Verbose)
{
foreach (var n in trees)
System.Console.WriteLine(TreeOutput.OutputTree(n, lexer, parser).ToString());
System.Console.WriteLine(new TreeOutput(lexer, parser).OutputTree(n).ToString());
}
var ty = new Regex("Parser$").Replace(Path.GetFileNameWithoutExtension(parser.GrammarFileName), "");
switch (ty)
Expand Down
5 changes: 3 additions & 2 deletions src/trparse/Grun.cs
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ public int Run(string parser_type = null)
foreach (var t in d.Nodes)
{
if (config.Verbose)
LoggerNs.TimedStderrOutput.WriteLine(TreeOutput.OutputTree(t, d.Lexer, d.Parser)
LoggerNs.TimedStderrOutput.WriteLine(new TreeOutput(d.Lexer, d.Parser).OutputTree(t)
.ToString());
}
}
Expand Down Expand Up @@ -192,8 +192,9 @@ public int Run(string parser_type = null)
}
catch (Exception e)
{
System.Console.WriteLine(e.ToString());
System.Console.Error.WriteLine(e.ToString());
result = 1;
System.Console.Out.WriteLine();
}

return result;
Expand Down
33 changes: 12 additions & 21 deletions src/trquery/Command.cs
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ public void Execute(Config config)
if (config.Verbose)
{
foreach (UnvParseTreeNode n in trees)
LoggerNs.TimedStderrOutput.WriteLine(TreeOutput.OutputTree(n, lexer, parser).ToString());
LoggerNs.TimedStderrOutput.WriteLine(new TreeOutput(lexer, parser).OutputTree(n).ToString());
}

foreach (var scommand in stree.command())
Expand Down Expand Up @@ -125,7 +125,7 @@ public void Execute(Config config)
{
LoggerNs.TimedStderrOutput.WriteLine("Operating on this:");
foreach (UnvParseTreeNode n in trees)
LoggerNs.TimedStderrOutput.WriteLine(TreeOutput.OutputTree(n, lexer, parser)
LoggerNs.TimedStderrOutput.WriteLine(new TreeOutput(lexer, parser).OutputTree(n)
.ToString());
}
if (scommand.MATCH_REQUIRED() != null)
Expand All @@ -137,8 +137,7 @@ public void Execute(Config config)
{
LoggerNs.TimedStderrOutput.WriteLine("Resulted in this:");
foreach (UnvParseTreeNode n in trees)
LoggerNs.TimedStderrOutput.WriteLine(TreeOutput.OutputTree(n, lexer, parser)
.ToString());
LoggerNs.TimedStderrOutput.WriteLine(new TreeOutput(lexer, parser).OutputTree(n).ToString());
}
}
}
Expand Down Expand Up @@ -180,8 +179,7 @@ public void Execute(Config config)
{
LoggerNs.TimedStderrOutput.WriteLine("Operating on this:");
foreach (UnvParseTreeNode n in trees)
LoggerNs.TimedStderrOutput.WriteLine(TreeOutput.OutputTree(n, lexer, parser)
.ToString());
LoggerNs.TimedStderrOutput.WriteLine(new TreeOutput(lexer, parser).OutputTree(n).ToString());
}
if (config.Verbose)
LoggerNs.TimedStderrOutput.WriteLine("Found " + nodes.Count + " nodes.");
Expand Down Expand Up @@ -225,8 +223,7 @@ public void Execute(Config config)
{
LoggerNs.TimedStderrOutput.WriteLine("Operating on this:");
foreach (UnvParseTreeNode n in trees)
LoggerNs.TimedStderrOutput.WriteLine(TreeOutput.OutputTree(n, lexer, parser)
.ToString());
LoggerNs.TimedStderrOutput.WriteLine(new TreeOutput(lexer, parser).OutputTree(n).ToString());
}
if (config.Verbose)
LoggerNs.TimedStderrOutput.WriteLine("Found " + nodes.Count + " nodes.");
Expand Down Expand Up @@ -266,8 +263,7 @@ public void Execute(Config config)
{
LoggerNs.TimedStderrOutput.WriteLine("Operating on this:");
foreach (UnvParseTreeNode n in trees)
LoggerNs.TimedStderrOutput.WriteLine(TreeOutput.OutputTree(n, lexer, parser)
.ToString());
LoggerNs.TimedStderrOutput.WriteLine(new TreeOutput(lexer, parser).OutputTree(n).ToString());
}
if (scommand.MATCH_REQUIRED() != null)
{
Expand All @@ -278,8 +274,7 @@ public void Execute(Config config)
{
LoggerNs.TimedStderrOutput.WriteLine("Resulted in this:");
foreach (UnvParseTreeNode n in trees)
LoggerNs.TimedStderrOutput.WriteLine(TreeOutput.OutputTree(n, lexer, parser)
.ToString());
LoggerNs.TimedStderrOutput.WriteLine(new TreeOutput(lexer, parser).OutputTree(n).ToString());
}
}
}
Expand Down Expand Up @@ -309,8 +304,7 @@ public void Execute(Config config)
{
LoggerNs.TimedStderrOutput.WriteLine("Operating on this:");
foreach (UnvParseTreeNode n in trees)
LoggerNs.TimedStderrOutput.WriteLine(TreeOutput.OutputTree(n, lexer, parser)
.ToString());
LoggerNs.TimedStderrOutput.WriteLine(new TreeOutput(lexer, parser).OutputTree(n).ToString());
}
if (scommand.MATCH_REQUIRED() != null)
{
Expand All @@ -321,8 +315,7 @@ public void Execute(Config config)
{
LoggerNs.TimedStderrOutput.WriteLine("Resulted in this:");
foreach (UnvParseTreeNode n in trees)
LoggerNs.TimedStderrOutput.WriteLine(TreeOutput.OutputTree(n, lexer, parser)
.ToString());
LoggerNs.TimedStderrOutput.WriteLine(new TreeOutput(lexer, parser).OutputTree(n).ToString());
}
}
}
Expand Down Expand Up @@ -365,8 +358,7 @@ public void Execute(Config config)
{
LoggerNs.TimedStderrOutput.WriteLine("Operating on this:");
foreach (UnvParseTreeNode n in nodes)
LoggerNs.TimedStderrOutput.WriteLine(TreeOutput.OutputTree(n, lexer, parser)
.ToString());
LoggerNs.TimedStderrOutput.WriteLine(new TreeOutput(lexer, parser).OutputTree(n).ToString());
}

foreach (UnvParseTreeNode n in nodes)
Expand All @@ -390,8 +382,7 @@ public void Execute(Config config)
{
LoggerNs.TimedStderrOutput.WriteLine("Resulted in this:");
foreach (UnvParseTreeNode n in trees)
LoggerNs.TimedStderrOutput.WriteLine(TreeOutput.OutputTree(n, lexer, parser)
.ToString());
LoggerNs.TimedStderrOutput.WriteLine(new TreeOutput(lexer, parser).OutputTree(n).ToString());
}
}
}
Expand All @@ -409,7 +400,7 @@ public void Execute(Config config)
if (config.Verbose)
{
foreach (UnvParseTreeNode node in trees)
System.Console.Error.WriteLine(TreeOutput.OutputTree(node, lexer, parser).ToString());
System.Console.Error.WriteLine(new TreeOutput(lexer, parser).OutputTree(node).ToString());
}
}

Expand Down
2 changes: 1 addition & 1 deletion src/trrename/Command.cs
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ public void Execute(Config config)
if (config.Verbose)
{
foreach (var n in trees)
System.Console.WriteLine(TreeOutput.OutputTree(n, lexer, parser).ToString());
System.Console.WriteLine(new TreeOutput(lexer, parser).OutputTree(n).ToString());
}

org.eclipse.wst.xml.xpath2.processor.Engine engine = new org.eclipse.wst.xml.xpath2.processor.Engine();
Expand Down
2 changes: 1 addition & 1 deletion src/trsort/Command.cs
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ public void Execute(Config config)
if (config.Verbose)
{
foreach (var n in trees)
System.Console.WriteLine(TreeOutput.OutputTree(n, lexer, parser).ToString());
System.Console.WriteLine(new TreeOutput(lexer, parser).OutputTree(n).ToString());
}

org.eclipse.wst.xml.xpath2.processor.Engine engine = new org.eclipse.wst.xml.xpath2.processor.Engine();
Expand Down
Loading

0 comments on commit 1835dde

Please sign in to comment.