adds indent level option to automatically generated code.
authorThomas Walker Lynch <xtujpz@reasoningtechnology.com>
Thu, 5 Sep 2024 14:46:58 +0000 (14:46 +0000)
committerThomas Walker Lynch <xtujpz@reasoningtechnology.com>
Thu, 5 Sep 2024 14:46:58 +0000 (14:46 +0000)
developer/executor/Arithmetic_Echo [deleted file]
developer/executor/RuleNameList [deleted file]
developer/executor/makefile-project.mk
developer/javac/GeneratePrintVisitor.java
developer/javac/GeneratePrintVisitorMethod.java
developer/javac/StringUtils.java [new file with mode: 0644]

diff --git a/developer/executor/Arithmetic_Echo b/developer/executor/Arithmetic_Echo
deleted file mode 100755 (executable)
index 0ae8589..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/usr/bin/env bash
-/var/user_data/Thomas-developer/GQL_to_Cypher/tool/jdk-22.0.1+8/bin/java -cp :/var/user_data/Thomas-developer/GQL_to_Cypher/developer/jvm:/var/user_data/Thomas-developer/GQL_to_Cypher/tool/executor/antlr-4.11.1-complete.jar:/var/user_data/Thomas-developer/GQL_to_Cypher/developer/jvm:/var/user_data/Thomas-developer/GQL_to_Cypher/tool/executor/antlr-4.11.1-complete.jar:/var/user_data/Thomas-developer/GQL_to_Cypher/developer/jvm:/var/user_data/Thomas-developer/GQL_to_Cypher/tool/executor/antlr-4.11.1-complete.jar:/var/user_data/Thomas-developer/GQL_to_Cypher/developer/jvm:/var/user_data/Thomas-developer/GQL_to_Cypher/tool/executor/antlr-4.11.1-complete.jar:/var/user_data/Thomas-developer/GQL_to_Cypher/developer/jvm:/var/user_data/Thomas-developer/GQL_to_Cypher/tool/executor/antlr-4.11.1-complete.jar:/var/user_data/Thomas-developer/GQL_to_Cypher/developer/jvm:/var/user_data/Thomas-developer/GQL_to_Cypher/developer/jvm/Arithmetic_Echo.jar Arithmetic_Echo $@
diff --git a/developer/executor/RuleNameList b/developer/executor/RuleNameList
deleted file mode 100755 (executable)
index 3142104..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/usr/bin/env bash
-/var/user_data/Thomas-developer/GQL_to_Cypher/tool/jdk-22.0.1+8/bin/java -cp :/var/user_data/Thomas-developer/GQL_to_Cypher/developer/jvm:/var/user_data/Thomas-developer/GQL_to_Cypher/tool/executor/antlr-4.11.1-complete.jar:/var/user_data/Thomas-developer/GQL_to_Cypher/developer/jvm:/var/user_data/Thomas-developer/GQL_to_Cypher/tool/executor/antlr-4.11.1-complete.jar:/var/user_data/Thomas-developer/GQL_to_Cypher/developer/jvm:/var/user_data/Thomas-developer/GQL_to_Cypher/tool/executor/antlr-4.11.1-complete.jar:/var/user_data/Thomas-developer/GQL_to_Cypher/developer/jvm:/var/user_data/Thomas-developer/GQL_to_Cypher/tool/executor/antlr-4.11.1-complete.jar:/var/user_data/Thomas-developer/GQL_to_Cypher/developer/jvm:/var/user_data/Thomas-developer/GQL_to_Cypher/tool/executor/antlr-4.11.1-complete.jar:/var/user_data/Thomas-developer/GQL_to_Cypher/developer/jvm:/var/user_data/Thomas-developer/GQL_to_Cypher/developer/jvm/RuleNameList.jar RuleNameList $@
index 6f7b660..eba37ce 100644 (file)
@@ -37,8 +37,12 @@ all: $(EXECUTOR_IN_FPL)
 RuleNameListRegx: $(EXECUTOR_IN_DIR)/RuleNameListRegx
 RuleNameList: $(EXECUTOR_IN_DIR)/RuleNameList
 
-GeneratePrintVisitorMethod: $(EXECUTOR_IN_DIR)/GeneratePrintVisitorMethod
-GeneratePrintVisitor: $(EXECUTOR_IN_DIR)/GeneratePrintVisitor GeneratePrintVisitorMethod
+GeneratePrintVisitorMethod:\
+  $(JAVA_COMP_IN_PRIMARY_DIR)/StringUtils.java\
+  $(EXECUTOR_IN_DIR)/GeneratePrintVisitorMethod
+GeneratePrintVisitor:\
+  $(JAVA_COMP_IN_PRIMARY_DIR)/StringUtils.java\
+  $(EXECUTOR_IN_DIR)/GeneratePrintVisitor GeneratePrintVisitorMethod
 
 
 
index de99dda..53d60af 100644 (file)
@@ -9,13 +9,14 @@ import java.io.PrintWriter;
 public class GeneratePrintVisitor {
 
     public static void main(String[] args) throws IOException {
-        if (args.length != 2) {
-            System.err.println("Usage: java GeneratePrintVisitor <grammarFile> <outputFile>");
+        if (args.length < 2 || args.length > 3) {
+            System.err.println("Usage: java GeneratePrintVisitor <grammarFile> <outputFile> [indentLevel]");
             System.exit(1);
         }
 
         String grammarFile = args[0];
         String outputFile = args[1];
+        int indentLevel = args.length == 3 ? Integer.parseInt(args[2]) : 0;
 
         // Extract the grammar name from the file name
         String grammarName = Paths.get(grammarFile).getFileName().toString().replace(".g4", "");
@@ -33,30 +34,32 @@ public class GeneratePrintVisitor {
 
         // Template for the PrintVisitor class
         String classTemplate = """
-            import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor;
+          import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor;
 
-            public class PrintVisitor extends AbstractParseTreeVisitor<String> {
-                private final String[] ruleNames;
+          public class PrintVisitor extends AbstractParseTreeVisitor<String> {
+            private final String[] ruleNames;
 
-                public PrintVisitor(String[] ruleNames) {
-                    this.ruleNames = ruleNames;
-                }
+            public PrintVisitor(String[] ruleNames) {
+              this.ruleNames = ruleNames;
+            }
+
+            // Generated print methods
+          """;
 
-                // Generated print methods
-            """;
+        // Indent the class template
+        String indentedClassTemplate = StringUtils.indentString(classTemplate, indentLevel);
 
         // Generate and output the PrintVisitor class
         try (PrintWriter writer = new PrintWriter(outputFile)) {
             // Write the class template
-            writer.print(classTemplate);
+            writer.print(indentedClassTemplate);
 
-            // Generate and write the print methods
             for (String ruleName : ruleNames) {
-                GeneratePrintVisitorMethod.generatePrintMethod(parserName, ruleName, writer);
+                GeneratePrintVisitorMethod.generatePrintMethod(parserName, ruleName, writer, indentLevel + 1);
             }
 
             // Close the class
-            writer.println("}");
+            writer.println(StringUtils.indentString("}", indentLevel));
         }
     }
 
index 6fb08d2..f44f478 100644 (file)
@@ -4,7 +4,7 @@ public class GeneratePrintVisitorMethod {
 
     public static void main(String[] args) {
         if (args.length != 3) {
-            System.err.println("Usage: GeneratePrintVisitorMethod <parserName> <ruleName> <outputFile>");
+            System.err.println("Usage: java GeneratePrintVisitorMethod <parserName> <ruleName> <outputFile>");
             System.exit(1);
         }
 
@@ -13,32 +13,36 @@ public class GeneratePrintVisitorMethod {
         String outputFile = args[2];
 
         try (PrintWriter writer = new PrintWriter(outputFile)) {
-            generatePrintMethod(parserName, ruleName, writer);
+            generatePrintMethod(parserName, ruleName, writer, 0); // Default indent level 0
         } catch (Exception e) {
             e.printStackTrace();
         }
     }
 
-    public static void generatePrintMethod(String parserName, String ruleName, PrintWriter writer) {
+    public static void generatePrintMethod(String parserName, String ruleName, PrintWriter writer, int indentLevel) {
         // Template for the print method using text blocks
         String template = """
-            public String visit _______0_ (_______1_. _______0_ Context ctx) {
-                StringBuilder result = new StringBuilder();
-                result.append("_______0_(");
-                for (int i = 0; i < ctx.getChildCount(); i++) {
-                    if (i > 0) result.append(", ");
-                    result.append(visit(ctx.getChild(i)));
-                }
-                result.append(")");
-                return result.toString();
+          public String visit_______0_(_______1_._______0_Context ctx) {
+            StringBuilder result = new StringBuilder();
+            result.append("_______0_(");
+            for (int i = 0; i < ctx.getChildCount(); i++) {
+              if (i > 0) result.append(", ");
+              result.append(visit(ctx.getChild(i)));
             }
-            """;
+            result.append(")");
+            return result.toString();
+          }
+          """;
 
         // Fill in the blanks in the template
         template = template.replace("_______0_", ruleName);
         template = template.replace("_______1_", parserName);
 
+        // Indent the template
+        String indentedTemplate = StringUtils.indentString(template, indentLevel);
+
         // Write the template to the output file
-        writer.print(template);
+        writer.print(indentedTemplate);
+        writer.println();
     }
 }
diff --git a/developer/javac/StringUtils.java b/developer/javac/StringUtils.java
new file mode 100644 (file)
index 0000000..774e253
--- /dev/null
@@ -0,0 +1,18 @@
+public class StringUtils {
+
+    private static int spacesPerIndentLevel = 2; // Default to 2 spaces per indent level
+
+    public static void setSpacesPerIndentLevel(int spaces) {
+        spacesPerIndentLevel = spaces;
+    }
+
+    public static String indentString(String template, int indentLevel) {
+        String indent = " ".repeat(spacesPerIndentLevel * indentLevel);
+        String[] lines = template.split("\n");
+        StringBuilder indentedTemplate = new StringBuilder();
+        for (String line : lines) {
+            indentedTemplate.append(indent).append(line).append("\n");
+        }
+        return indentedTemplate.toString();
+    }
+}