From d9174deac5b033d5db58bc97b8da90d242ae07e9 Mon Sep 17 00:00:00 2001 From: Thomas Walker Lynch Date: Tue, 3 Sep 2024 06:52:14 +0000 Subject: [PATCH] deletes the regexp based grammar tokens separator, to be replaced by parsing grammar, introduced leveled makefile to accomodate setup and tools builds --- .../{GrammarSplitter => ANTLR_OUT_FL} | 2 +- developer/executor/TerminalToCategory | 2 - developer/executor/env_build | 26 ++-- developer/executor/makefile | 121 ++---------------- developer/executor/makefile-project | 117 +++++++++++++++++ developer/executor/makefile-tool | 35 +++++ developer/javac/ANTLR_OUT_FL.java | 109 ++++++++++++++++ ...meList.java => PrintRuleNameListRegx.java} | 2 +- developer/test/combined_output.txt | 0 9 files changed, 288 insertions(+), 126 deletions(-) rename developer/executor/{GrammarSplitter => ANTLR_OUT_FL} (67%) delete mode 100755 developer/executor/TerminalToCategory create mode 100644 developer/executor/makefile-project create mode 100644 developer/executor/makefile-tool create mode 100644 developer/javac/ANTLR_OUT_FL.java rename developer/javac/{PrintRuleNameList.java => PrintRuleNameListRegx.java} (97%) delete mode 100644 developer/test/combined_output.txt diff --git a/developer/executor/GrammarSplitter b/developer/executor/ANTLR_OUT_FL similarity index 67% rename from developer/executor/GrammarSplitter rename to developer/executor/ANTLR_OUT_FL index c1e8c25..bc88289 100755 --- a/developer/executor/GrammarSplitter +++ b/developer/executor/ANTLR_OUT_FL @@ -1,2 +1,2 @@ #!/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/developer/jvm/GrammarSplitter.jar GrammarSplitter $@ +/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/developer/jvm/ANTLR_OUT_FL.jar ANTLR_OUT_FL $@ diff --git a/developer/executor/TerminalToCategory b/developer/executor/TerminalToCategory deleted file mode 100755 index 0cc5d60..0000000 --- a/developer/executor/TerminalToCategory +++ /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/developer/jvm/TerminalToCategory.jar TerminalToCategory $@ diff --git a/developer/executor/env_build b/developer/executor/env_build index a77a618..fa99ac5 100755 --- a/developer/executor/env_build +++ b/developer/executor/env_build @@ -95,25 +95,27 @@ if [ -z "${ANTLR_IN_PRIMARY_FPL}" ]; then echo "No ANTLR input grammar files found" fi +# replaced with a tool called ANTLR_OUR_FL +# # This function accepts a grammar name, or a grammar name with an extension; # and sets a variable of the form ANTLR_OUT__FPL to a list of # files that ANTLR would produce for . -set_ANTLR_out_fpl_var() { - local grammar=$1 - export ANTLR_OUT_${grammar}_FPL="${ANTLR_OUT_DIR}/${grammar}Lexer.java ${ANTLR_OUT_DIR}/${grammar}Parser.java ${ANTLR_OUT_DIR}/${grammar}BaseVisitor.java ${ANTLR_OUT_DIR}/${grammar}Visitor.java" -} +# set_ANTLR_out_fpl_var() { +# local grammar=$1 +# export ANTLR_OUT_${grammar}_FPL="${ANTLR_OUT_DIR}/${grammar}Lexer.java ${ANTLR_OUT_DIR}/${grammar}Parser.java ${ANTLR_OUT_DIR}/${grammar}BaseVisitor.java ${ANTLR_OUT_DIR}/${grammar}Visitor.java" +# } # Generate ANTLR_OUT__FPL for each grammar -for grammar in ${ANTLR_GRAMMAR_LIST}; do - set_ANTLR_out_fpl_var ${grammar} -done +# for grammar in ${ANTLR_GRAMMAR_LIST}; do +# set_ANTLR_out_fpl_var ${grammar} +# done # Combine all individual file lists into ANTLR_OUT_FPL -ANTLR_OUT_FPL="" -for grammar in ${ANTLR_GRAMMAR_LIST}; do - ANTLR_OUT_FPL="${ANTLR_OUT_FPL} $(eval echo \$ANTLR_OUT_${grammar}_FPL)" -done -export ANTLR_OUT_FPL +# ANTLR_OUT_FPL="" +# for grammar in ${ANTLR_GRAMMAR_LIST}; do +# ANTLR_OUT_FPL="${ANTLR_OUT_FPL} $(eval echo \$ANTLR_OUT_${grammar}_FPL)" +# done +# export ANTLR_OUT_FPL #-------------------------------------------------------------------------------- # Java files diff --git a/developer/executor/makefile b/developer/executor/makefile index 4a82e3b..d5b6644 100644 --- a/developer/executor/makefile +++ b/developer/executor/makefile @@ -1,72 +1,9 @@ -#================================================================================ -# Custom make targets -# +# Top level makefile assures we do setup, tools, and project build in correct order. -all: setup $(EXECUTOR_IN_FPL) +.PHONY: all setup tools project - -PrintRuleNameList: $(EXECUTOR_IN_DIR)/PrintRuleNameList - -Arithmetic_Echo: $(ANTLR_OUT_Arithmetic_FPL) $(JAVAC_D)/Arithmetic_Echo_PrintVisitor.java - @if [ -z "$(ANTLR_OUT_Arithmetic_FPL)" ]; then \ - echo "variable ANTLR_OUT_Arithmetic_FPL empty."; \ - exit 1; \ - fi - make $(EXECUTOR_IN_DIR)/Arithmetic_Echo - -Arithmetic_Echo__Test: $(ANTLR_OUT_Arithmetic_FPL) $(JAVAC_D)/Arithmetic_Echo_PrintVisitor.java - @if [ -z "$(ANTLR_OUT_Arithmetic_FPL)" ]; then \ - echo "variable ANTLR_OUT_Arithmetic_FPL empty."; \ - exit 1; \ - fi - make $(EXECUTOR_IN_DIR)/Arithmetic_Echo__Test - -Arithmetic_Syntax: $(ANTLR_OUT_Arithmetic_FPL) $(JAVAC_D)/Arithmetic_Echo_PrintVisitor.java - @if [ -z "$(ANTLR_OUT_Arithmetic_FPL)" ]; then \ - echo "variable ANTLR_OUT_Arithmetic_FPL empty."; \ - exit 1; \ - fi - make $(EXECUTOR_IN_DIR)/Arithmetic_Syntax - -Arithmetic_Syntax__Test: $(ANTLR_OUT_Arithmetic_FPL) $(JAVAC_D)/Arithmetic_Syntax_PrintVisitor.java - @if [ -z "$(ANTLR_OUT_Arithmetic_FPL)" ]; then \ - echo "variable ANTLR_OUT_Arithmetic_FPL empty."; \ - exit 1; \ - fi - make $(EXECUTOR_IN_DIR)/Arithmetic_Syntax__Test - -GQL_20240412_Syntax: $(ANTLR_OUT_GQL_20240412_FPL) $(JAVAC_D)/GQL_20240412_Syntax_PrintVisitor.java - @if [ -z "$(ANTLR_OUT_GQL_20240412_FPL)" ]; then \ - echo "variable ANTLR_OUT_GQL_20240412_FPL empty."; \ - exit 1; \ - fi - make $(EXECUTOR_IN_DIR)/GQL_20240412_Syntax - -GQL_20240412_Syntax__Test: $(ANTLR_OUT_GQL_20240412_FPL) $(JAVAC_D)/GQL_20240412_Syntax_PrintVisitor.java - @if [ -z "$(ANTLR_OUT_GQL_20240412_FPL)" ]; then \ - echo "variable ANTLR_OUT_GQL_20240412_FPL empty."; \ - exit 1; \ - fi - make $(EXECUTOR_IN_DIR)/GQL_20240412_Syntax__Test - -TerminalToCategory: - make $(EXECUTOR_IN_DIR)/TerminalToCategory - -GrammarSplitter: - make $(EXECUTOR_IN_DIR)/GrammarSplitter - - - -# make the `.java` files for all grammars -grammar: setup $(ANTLR_OUT_FPL) - -# Specific grammar targets. Run them like this: -# > make -# e.g. > make GQL_test -$(foreach grammar,$(ANTLR_GRAMMAR_LIST),$(eval $(grammar): $(value ANTLR_OUT_$(grammar)_FPL))) - -# Compile all the .java files. -java: setup $(JAVA_COMP_OUT_FPL) +# The 'all' target now depends on 'tools' and 'project' +all: setup tools project .PHONY: version version: @@ -76,51 +13,15 @@ version: @ make -v | head -n 1 @ echo "makefile 0.4" -.PHONY: setup -# ANTLR automatically creates $(ANTLR_OUT_DIR) setup: mkdir -p $(ANTLR_IN_PRIMARY_DIR) $(JAVA_COMP_IN_PRIMARY_DIR) $(JVM_IN_DIR) mkdir -p $(EXECUTOR_IN_DIR) test deprecated experiment documentation temporary -# Default clean target -.PHONY: setup -clean: - @echo "Use the clean script from the $(EXECUTOR_IN_DIR) directory instead of \`make clean\`" - @$(EXECUTOR_IN_DIR)/clean - -#useful for distinguishing initial make error messages and message generated by rules firing -nothing: - @: - -#================================================================================ -# generic targets, aka recipes -# - -$(ANTLR_OUT_DIR)/%Lexer.java \ -$(ANTLR_OUT_DIR)/%Parser.java \ -$(ANTLR_OUT_DIR)/%BaseVisitor.java \ -$(ANTLR_OUT_DIR)/%Visitor.java: $(ANTLR_IN_PRIMARY_FPL) - @echo "making grammar from:" $< - $(JAVA_INTERP) -jar $(ANTLR_JAR) -Dlanguage=Java -visitor -o $(ANTLR_OUT_DIR_PARENT) $< - -# Rule to build .class files from .java files -$(JAVA_COMP_OUT_DIR)/%.class: $(JAVA_COMP_IN_PRIMARY_DIR)/%.java - @echo "Compiling $<..." - $(JAVA_COMP) -d $(JAVA_COMP_OUT_DIR) -sourcepath $(JAVA_COMP_IN_DL) $< - @echo "Created $@" - -# Without this, GNU make inserts an 'rm -rf' not on the recipe and deletes the .jar files -# after making them. Why make why? -.PRECIOUS: $(JAVA_COMP_OUT_DIR)/%.jar -# Rule to build .jar files from .class files -$(JAVA_COMP_OUT_DIR)/%.jar: $(JAVA_COMP_OUT_DIR)/%.class - @echo "Building $*..." - $(JAVA_ARCHIVE) cf $@ -C $(JAVA_COMP_OUT_DIR) $*.class - @echo "Created $@" +# Ensure tools like ANTLR_OUT_FL are built before building the project programs +tools: setup + $(MAKE) -f $(EXECUTOR_IN_DIR)/makefile-tool -$(MAKEFLAGS) -$(EXECUTOR_IN_DIR)/%: $(JVM_IN_DIR)/%.jar - @echo "Creating script for $*..." - @echo "#!/usr/bin/env bash" > $(EXECUTOR_IN_DIR)/$* - @echo "$(JAVA_INTERP) -cp ${CLASSPATH}:${JVM_IN_DP}:$(JVM_IN_DP)/$*.jar $*" \$$\@ >> $(EXECUTOR_IN_DIR)/$* - chmod +x $(EXECUTOR_IN_DIR)/$* - @echo "Created script $(EXECUTOR_IN_DIR)/$*" +# Run the project makefile and pass any targets or arguments to it +PROJECT_GOALS := $(filter-out setup version,$(MAKECMDGOALS)) +project: setup tools + $(MAKE) -f $(EXECUTOR_IN_DIR)/makefile-project -$(MAKEFLAGS) $(PROJECT_GOALS) diff --git a/developer/executor/makefile-project b/developer/executor/makefile-project new file mode 100644 index 0000000..0826e62 --- /dev/null +++ b/developer/executor/makefile-project @@ -0,0 +1,117 @@ +#================================================================================ +# Custom make targets +# + +all: $(EXECUTOR_IN_FPL) + +PrintRuleNameList: $(EXECUTOR_IN_DIR)/PrintRuleNameList + + +ANTLR_OUT_Arithmetic_FPL := $(shell ANTLR_OUT_FL Arithmetic.g4 -visitor -no-listener) +Arithmetic_Echo: $(ANTLR_OUT_Arithmetic_FPL) $(JAVA_COMP_IN_PRIMARY_DIR)/Arithmetic_Echo_PrintVisitor.java + @if [ -z "$(ANTLR_OUT_Arithmetic_FPL)" ]; then \ + echo "variable ANTLR_OUT_Arithmetic_FPL empty."; \ + exit 1; \ + fi + make $(EXECUTOR_IN_DIR)/Arithmetic_Echo + +Arithmetic_Echo__Test: $(ANTLR_OUT_Arithmetic_FPL) $(JAVA_COMP_IN_PRIMARY_DIR)/Arithmetic_Echo_PrintVisitor.java + @if [ -z "$(ANTLR_OUT_Arithmetic_FPL)" ]; then \ + echo "variable ANTLR_OUT_Arithmetic_FPL empty."; \ + exit 1; \ + fi + make $(EXECUTOR_IN_DIR)/Arithmetic_Echo__Test + +Arithmetic_Syntax: $(ANTLR_OUT_Arithmetic_FPL) $(JAVA_COMP_IN_PRIMARY_DIR)/Arithmetic_Syntax_PrintVisitor.java + @if [ -z "$(ANTLR_OUT_Arithmetic_FPL)" ]; then \ + echo "variable ANTLR_OUT_Arithmetic_FPL empty."; \ + exit 1; \ + fi + make $(EXECUTOR_IN_DIR)/Arithmetic_Syntax + +Arithmetic_Syntax__Test: $(ANTLR_OUT_Arithmetic_FPL) $(JAVA_COMP_IN_PRIMARY_DIR)/Arithmetic_Syntax_PrintVisitor.java + @if [ -z "$(ANTLR_OUT_Arithmetic_FPL)" ]; then \ + echo "variable ANTLR_OUT_Arithmetic_FPL empty."; \ + exit 1; \ + fi + make $(EXECUTOR_IN_DIR)/Arithmetic_Syntax__Test + +GQL_20240412_Syntax: $(ANTLR_OUT_GQL_20240412_FPL) $(JAVA_COMP_IN_PRIMARY_DIR)/GQL_20240412_Syntax_PrintVisitor.java + @if [ -z "$(ANTLR_OUT_GQL_20240412_FPL)" ]; then \ + echo "variable ANTLR_OUT_GQL_20240412_FPL empty."; \ + exit 1; \ + fi + make $(EXECUTOR_IN_DIR)/GQL_20240412_Syntax + +GQL_20240412_Syntax__Test: $(ANTLR_OUT_GQL_20240412_FPL) $(JAVA_COMP_IN_PRIMARY_DIR)/GQL_20240412_Syntax_PrintVisitor.java + @if [ -z "$(ANTLR_OUT_GQL_20240412_FPL)" ]; then \ + echo "variable ANTLR_OUT_GQL_20240412_FPL empty."; \ + exit 1; \ + fi + make $(EXECUTOR_IN_DIR)/GQL_20240412_Syntax__Test + +TerminalToCategory: + make $(EXECUTOR_IN_DIR)/TerminalToCategory + +GrammarSplitter: + make $(EXECUTOR_IN_DIR)/GrammarSplitter + + + +# make the `.java` files for all grammars +grammar: $(ANTLR_OUT_FPL) + +# Specific grammar targets. Run them like this: +# > make +# e.g. > make GQL_test +$(foreach grammar,$(ANTLR_GRAMMAR_LIST),$(eval $(grammar): $(value ANTLR_OUT_$(grammar)_FPL))) + +# Compile all the .java files. +java: $(JAVA_COMP_OUT_FPL) + +# Default clean target +.PHONY: clean +clean: + @echo "Use the clean script from the $(EXECUTOR_IN_DIR) directory instead of \`make clean\`" + @$(EXECUTOR_IN_DIR)/clean + +#useful for distinguishing initial make error messages and message generated by rules firing +nothing: + @: + +#================================================================================ +# generic targets, aka recipes +# + +$(ANTLR_OUT_DIR)/%Lexer.java \ +$(ANTLR_OUT_DIR)/%Lexer.tokens \ +$(ANTLR_OUT_DIR)/%Parser.java \ +$(ANTLR_OUT_DIR)/%Parser.tokens \ +$(ANTLR_OUT_DIR)/%BaseListener.java \ +$(ANTLR_OUT_DIR)/%Listener.java \ +$(ANTLR_OUT_DIR)/%BaseVisitor.java \ +$(ANTLR_OUT_DIR)/%Visitor.java: $(ANTLR_IN_PRIMARY_FPL) + @echo "making grammar from:" $< + $(JAVA_INTERP) -jar $(ANTLR_JAR) -Dlanguage=Java -visitor -o $(ANTLR_OUT_DIR_PARENT) $< + +# Rule to build .class files from .java files +$(JAVA_COMP_OUT_DIR)/%.class: $(JAVA_COMP_IN_PRIMARY_DIR)/%.java + @echo "Compiling $<..." + $(JAVA_COMP) -d $(JAVA_COMP_OUT_DIR) -sourcepath $(JAVA_COMP_IN_DL) $< + @echo "Created $@" + +# Without this, GNU make inserts an 'rm -rf' not on the recipe and deletes the .jar files +# after making them. Why make why? +.PRECIOUS: $(JAVA_COMP_OUT_DIR)/%.jar +# Rule to build .jar files from .class files +$(JAVA_COMP_OUT_DIR)/%.jar: $(JAVA_COMP_OUT_DIR)/%.class + @echo "Building $*..." + $(JAVA_ARCHIVE) cf $@ -C $(JAVA_COMP_OUT_DIR) $*.class + @echo "Created $@" + +$(EXECUTOR_IN_DIR)/%: $(JVM_IN_DIR)/%.jar + @echo "Creating script for $*..." + @echo "#!/usr/bin/env bash" > $(EXECUTOR_IN_DIR)/$* + @echo "$(JAVA_INTERP) -cp ${CLASSPATH}:${JVM_IN_DP}:$(JVM_IN_DP)/$*.jar $*" \$$\@ >> $(EXECUTOR_IN_DIR)/$* + chmod +x $(EXECUTOR_IN_DIR)/$* + @echo "Created script $(EXECUTOR_IN_DIR)/$*" diff --git a/developer/executor/makefile-tool b/developer/executor/makefile-tool new file mode 100644 index 0000000..4ee0f48 --- /dev/null +++ b/developer/executor/makefile-tool @@ -0,0 +1,35 @@ +#================================================================================ +# Custom make targets +# + +all: ANTLR_OUT_FL + +ANTLR_OUT_FL: $(EXECUTOR_IN_DIR)/ANTLR_OUT_FL + + + +#================================================================================ +# generic targets, aka recipes +# + +# Rule to build .class files from .java files +$(JAVA_COMP_OUT_DIR)/%.class: $(JAVA_COMP_IN_PRIMARY_DIR)/%.java + @echo "Compiling $<..." + $(JAVA_COMP) -d $(JAVA_COMP_OUT_DIR) -sourcepath $(JAVA_COMP_IN_DL) $< + @echo "Created $@" + +# Without this, GNU make inserts an 'rm -rf' not on the recipe and deletes the .jar files +# after making them. Why make why? +.PRECIOUS: $(JAVA_COMP_OUT_DIR)/%.jar +# Rule to build .jar files from .class files +$(JAVA_COMP_OUT_DIR)/%.jar: $(JAVA_COMP_OUT_DIR)/%.class + @echo "Building $*..." + $(JAVA_ARCHIVE) cf $@ -C $(JAVA_COMP_OUT_DIR) $*.class + @echo "Created $@" + +$(EXECUTOR_IN_DIR)/%: $(JVM_IN_DIR)/%.jar + @echo "Creating script for $*..." + @echo "#!/usr/bin/env bash" > $(EXECUTOR_IN_DIR)/$* + @echo "$(JAVA_INTERP) -cp ${CLASSPATH}:${JVM_IN_DP}:$(JVM_IN_DP)/$*.jar $*" \$$\@ >> $(EXECUTOR_IN_DIR)/$* + chmod +x $(EXECUTOR_IN_DIR)/$* + @echo "Created script $(EXECUTOR_IN_DIR)/$*" diff --git a/developer/javac/ANTLR_OUT_FL.java b/developer/javac/ANTLR_OUT_FL.java new file mode 100644 index 0000000..bdd85a3 --- /dev/null +++ b/developer/javac/ANTLR_OUT_FL.java @@ -0,0 +1,109 @@ +/* + +Accepts an antlr grammar file name of the form: [path/][Lexer/Parser][.g4] + +Prints a space separated list of files antlr4 would output. + +The Lexer or Parser suffix, or absence thereof, tell this program if +antlr would create lexer and parser files, or both. + +The `-visitor` and `no-lsistner` options also affect the output, as they would +for antlr. + +*/ +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +public class ANTLR_OUT_FL { + + public static void main(String[] args) { + if (args.length == 0) { + System.err.println("Usage: java ANTLR_OUT_FL [-visitor] [-no-listener]"); + System.exit(1); + } + + boolean visitor = false; + boolean noListener = false; + boolean noTokens = false; + List argList = new ArrayList<>(); + + // Parse the arguments + for (String arg : args) { + if (arg.startsWith("-")) { + switch (arg) { + case "-visitor": + visitor = true; + break; + case "-no-listener": + noListener = true; + break; + case "-no-tokens": + noTokens = true; + break; + default: + System.err.println("Unrecognized option: " + arg); + System.err.println("Usage: java ANTLR_OUT_FL [-visitor] [-no-listener]"); + System.exit(1); + } + } else { + argList.add(arg); + } + } + + // Ensure there is exactly one grammar file argument + if (argList.size() != 1) { + System.err.println("Usage: java ANTLR_OUT_FL [-visitor] [-no-listener]"); + System.exit(1); + } + + String grammarFile = argList.get(0); + + List generatedFiles = generateFileList(grammarFile, visitor, noListener ,noTokens); + + // Print the files in a space-separated format on a single line + if (!generatedFiles.isEmpty()) { + System.out.print(generatedFiles.get(0)); // Print the first file + for (int i = 1; i < generatedFiles.size(); i++) { + System.out.print(" " + generatedFiles.get(i)); // Print space and each subsequent file + } + } + System.out.println(); // Print a newline at the end + } + + public static List generateFileList(String grammarFile, boolean visitor, boolean noListener ,boolean noTokens) { + String baseName = new File(grammarFile).getName().replace(".g4", ""); + List fileList = new ArrayList<>(); + + // Determine if this is a lexer, parser, or both + boolean isLexer = baseName.endsWith("Lexer"); + boolean isParser = baseName.endsWith("Parser"); + boolean isCombined = !isLexer && !isParser; + + if (isLexer || isCombined) { + // Lexer files + fileList.add(baseName + "Lexer.java"); + if (!noTokens) fileList.add(baseName + "Lexer.tokens"); + } + + if (isParser || isCombined) { + // Parser files + fileList.add(baseName + "Parser.java"); + if (!noTokens) fileList.add(baseName + ".tokens"); + + // Listener-related files + if (!noListener) { + fileList.add(baseName + "Listener.java"); + fileList.add(baseName + "BaseListener.java"); + } + + // Visitor-related files + if (visitor) { + fileList.add(baseName + "Visitor.java"); + fileList.add(baseName + "BaseVisitor.java"); + } + } + + return fileList; + } +} diff --git a/developer/javac/PrintRuleNameList.java b/developer/javac/PrintRuleNameListRegx.java similarity index 97% rename from developer/javac/PrintRuleNameList.java rename to developer/javac/PrintRuleNameListRegx.java index 6c58e64..1fb4459 100644 --- a/developer/javac/PrintRuleNameList.java +++ b/developer/javac/PrintRuleNameListRegx.java @@ -10,7 +10,7 @@ import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; -public class PrintRuleNameList { +public class PrintRuleNameListRegx { public static void main(String[] args) { if (args.length != 1) { diff --git a/developer/test/combined_output.txt b/developer/test/combined_output.txt deleted file mode 100644 index e69de29..0000000 -- 2.20.1