From: Thomas Walker Lynch Date: Thu, 5 Sep 2024 14:46:58 +0000 (+0000) Subject: adds indent level option to automatically generated code. X-Git-Url: https://git.reasoningtechnology.com/style/static/git-logo.png?a=commitdiff_plain;h=086dbd5290c105afccb5f52de1103d928f138337;p=GQL-to-Cypher adds indent level option to automatically generated code. --- diff --git a/developer/executor/Arithmetic_Echo b/developer/executor/Arithmetic_Echo deleted file mode 100755 index 0ae8589..0000000 --- a/developer/executor/Arithmetic_Echo +++ /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 index 3142104..0000000 --- a/developer/executor/RuleNameList +++ /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 $@ diff --git a/developer/executor/makefile-project.mk b/developer/executor/makefile-project.mk index 6f7b660..eba37ce 100644 --- a/developer/executor/makefile-project.mk +++ b/developer/executor/makefile-project.mk @@ -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 diff --git a/developer/javac/GeneratePrintVisitor.java b/developer/javac/GeneratePrintVisitor.java index de99dda..53d60af 100644 --- a/developer/javac/GeneratePrintVisitor.java +++ b/developer/javac/GeneratePrintVisitor.java @@ -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 "); + if (args.length < 2 || args.length > 3) { + System.err.println("Usage: java GeneratePrintVisitor [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 { - private final String[] ruleNames; + public class PrintVisitor extends AbstractParseTreeVisitor { + 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)); } } diff --git a/developer/javac/GeneratePrintVisitorMethod.java b/developer/javac/GeneratePrintVisitorMethod.java index 6fb08d2..f44f478 100644 --- a/developer/javac/GeneratePrintVisitorMethod.java +++ b/developer/javac/GeneratePrintVisitorMethod.java @@ -4,7 +4,7 @@ public class GeneratePrintVisitorMethod { public static void main(String[] args) { if (args.length != 3) { - System.err.println("Usage: GeneratePrintVisitorMethod "); + System.err.println("Usage: java GeneratePrintVisitorMethod "); 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 index 0000000..774e253 --- /dev/null +++ b/developer/javac/StringUtils.java @@ -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(); + } +}