From dd1cad533cf71a2445d563fe9f27dc0cecd08831 Mon Sep 17 00:00:00 2001 From: Ken Domino Date: Fri, 14 Jul 2023 08:41:21 -0400 Subject: [PATCH] Add -lex-only option so .errors files don't contain duplicate error messages. --- _scripts/templates/CSharp/st.Test.cs | 101 ++++++++++++++++----------- _scripts/templates/CSharp/st.test.sh | 7 +- 2 files changed, 67 insertions(+), 41 deletions(-) diff --git a/_scripts/templates/CSharp/st.Test.cs b/_scripts/templates/CSharp/st.Test.cs index 69ced9dbb5..63c9298028 100644 --- a/_scripts/templates/CSharp/st.Test.cs +++ b/_scripts/templates/CSharp/st.Test.cs @@ -91,6 +91,7 @@ public static IParseTree Parse(string input) static int exit_code = 0; static Encoding encoding = null; static int string_instance = 0; + static bool lex_only = false; static string prefix = ""; static bool quiet = false; @@ -100,7 +101,11 @@ static void Main(string[] args) List\ inputs = new List\(); for (int i = 0; i \< args.Length; ++i) { - if (args[i] == "-profile") + if (args[i] == "-lex-only") + { + lex_only = true; + } + else if (args[i] == "-profile") { show_profile = true; } @@ -224,13 +229,16 @@ static void ParseFilename(string input, int row_number) static void DoParse(ICharStream str, string input_name, int row_number) { - var output = tee ? new StreamWriter(input_name + ".errors") : System.Console.Error; + var output = tee ? new StreamWriter(input_name + ".errors") : System.Console.Error; var lexer = new (str); - var listener_lexer = new ErrorListener\(quiet, tee, output); - lexer.RemoveErrorListeners(); - lexer.AddErrorListener(listener_lexer); + var listener_lexer = new ErrorListener\(quiet, tee, output); + lexer.RemoveErrorListeners(); + lexer.AddErrorListener(listener_lexer); + DateTime before = DateTime.Now; + DateTime after = DateTime.Now; if (show_tokens) { + before = DateTime.Now; var output_tokens = tee ? new StreamWriter(input_name + ".token") : System.Console.Error; for (int i = 0; ; ++i) { @@ -243,47 +251,62 @@ static void DoParse(ICharStream str, string input_name, int row_number) } if (tee) output_tokens.Close(); lexer.Reset(); + after = DateTime.Now; } - var tokens = new CommonTokenStream(lexer); - var parser = new (tokens); - var listener_parser = new ErrorListener\(quiet, tee, output); - parser.RemoveErrorListeners(); - parser.AddErrorListener(listener_parser); - if (show_profile) - { - parser.Profile = true; - } - if (show_trace) - { - parser.Trace = true; -// ParserATNSimulator.trace_atn_sim = true; - } - DateTime before = DateTime.Now; - var tree = parser.(); - DateTime after = DateTime.Now; var result = ""; - if (listener_lexer.had_error || listener_parser.had_error) + if (lex_only) { - result = "fail"; - exit_code = 1; - } - else - { - result = "success"; - } - if (show_tree) - { - if (tee) + if (listener_lexer.had_error) { - System.IO.File.WriteAllText(input_name + ".tree", tree.ToStringTree(parser)); - } else + result = "fail"; + exit_code = 1; + } + else { - System.Console.Error.WriteLine(tree.ToStringTree(parser)); + result = "success"; } } - if (show_profile) - { - System.Console.Error.WriteLine(String.Join(",\n\r", parser.ParseInfo.getDecisionInfo().Select(d => d.ToString()))); + else { + var tokens = new CommonTokenStream(lexer); + var parser = new (tokens); + var listener_parser = new ErrorListener\(quiet, tee, output); + parser.RemoveErrorListeners(); + parser.AddErrorListener(listener_parser); + if (show_profile) + { + parser.Profile = true; + } + if (show_trace) + { + parser.Trace = true; + // ParserATNSimulator.trace_atn_sim = true; + } + before = DateTime.Now; + var tree = parser.(); + after = DateTime.Now; + if (listener_lexer.had_error || listener_parser.had_error) + { + result = "fail"; + exit_code = 1; + } + else + { + result = "success"; + } + if (show_tree) + { + if (tee) + { + System.IO.File.WriteAllText(input_name + ".tree", tree.ToStringTree(parser)); + } else + { + System.Console.Error.WriteLine(tree.ToStringTree(parser)); + } + } + if (show_profile) + { + System.Console.Error.WriteLine(String.Join(",\n\r", parser.ParseInfo.getDecisionInfo().Select(d => d.ToString()))); + } } if (!quiet) { diff --git a/_scripts/templates/CSharp/st.test.sh b/_scripts/templates/CSharp/st.test.sh index 0e36b74da0..6225a84986 100644 --- a/_scripts/templates/CSharp/st.test.sh +++ b/_scripts/templates/CSharp/st.test.sh @@ -37,7 +37,8 @@ done rm -f parse.txt for f in ${files[*]} do - dotnet trwdog -- ./bin/Debug/net7.0/Test.exeTest -q -tee -tree $f -tokens >> parse.txt 2>&1 + dotnet trwdog -- ./bin/Debug/net7.0/Test.exeTest -q -tee -tokens -lex-only $f >> parse.txt 2>&1 + dotnet trwdog -- ./bin/Debug/net7.0/Test.exeTest -q -tee -tree $f >> parse.txt 2>&1 xxx="$?" if [ "$xxx" -ne 0 ] then @@ -46,7 +47,9 @@ do done # Group parsing. -echo "${files[*]}" | dotnet trwdog -- ./bin/Debug/net7.0/Test.exeTest -q -x -tee -tree -tokens > parse.txt 2>&1 +rm -f parse.txt +echo "${files[*]}" | dotnet trwdog -- ./bin/Debug/net7.0/Test.exeTest -q -x -tee -lex-only -tokens >> parse.txt 2>&1 +echo "${files[*]}" | dotnet trwdog -- ./bin/Debug/net7.0/Test.exeTest -q -x -tee -tree >> parse.txt 2>&1 status=$?