From: Thomas Walker Lynch Date: Tue, 3 Sep 2024 06:52:14 +0000 (+0000) Subject: deletes the regexp based grammar tokens separator, to be replaced by parsing grammar... X-Git-Url: https://git.reasoningtechnology.com/usr/lib/python2.7/encodings/cp852.py?a=commitdiff_plain;h=d9174deac5b033d5db58bc97b8da90d242ae07e9;p=GQL-to-Cypher deletes the regexp based grammar tokens separator, to be replaced by parsing grammar, introduced leveled makefile to accomodate setup and tools builds --- diff --git a/developer/executor/ANTLR_OUT_FL b/developer/executor/ANTLR_OUT_FL new file mode 100755 index 0000000..bc88289 --- /dev/null +++ b/developer/executor/ANTLR_OUT_FL @@ -0,0 +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/developer/jvm/ANTLR_OUT_FL.jar ANTLR_OUT_FL $@ diff --git a/developer/executor/GrammarSplitter b/developer/executor/GrammarSplitter deleted file mode 100755 index c1e8c25..0000000 --- a/developer/executor/GrammarSplitter +++ /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/GrammarSplitter.jar GrammarSplitter $@ 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/PrintRuleNameList.java deleted file mode 100644 index 6c58e64..0000000 --- a/developer/javac/PrintRuleNameList.java +++ /dev/null @@ -1,47 +0,0 @@ -/* -Directly reads an ANTLR grammar file, a `.g4` file, and lists all the rules found in it. - -*/ -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.IOException; -import java.util.HashSet; -import java.util.Set; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -public class PrintRuleNameList { - - public static void main(String[] args) { - if (args.length != 1) { - System.out.println("Usage: java GrammarRuleExtractor "); - return; - } - - String filePath = args[0]; - Set ruleNames = new HashSet<>(); - - try (BufferedReader br = new BufferedReader(new FileReader(filePath))) { - StringBuilder content = new StringBuilder(); - String line; - while ((line = br.readLine()) != null) { - content.append(line).append("\n"); - } - - // Updated pattern to handle multi-line rules - Pattern rulePattern = Pattern.compile("(?m)^\\s*([a-zA-Z_][a-zA-Z0-9_]*)\\s*:"); - - Matcher matcher = rulePattern.matcher(content.toString()); - while (matcher.find()) { - ruleNames.add(matcher.group(1)); - } - - System.out.println("Extracted Rules:"); - for (String rule : ruleNames) { - System.out.println(rule); - } - } catch (IOException e) { - e.printStackTrace(); - } - } -} diff --git a/developer/javac/PrintRuleNameListRegx.java b/developer/javac/PrintRuleNameListRegx.java new file mode 100644 index 0000000..1fb4459 --- /dev/null +++ b/developer/javac/PrintRuleNameListRegx.java @@ -0,0 +1,47 @@ +/* +Directly reads an ANTLR grammar file, a `.g4` file, and lists all the rules found in it. + +*/ +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; +import java.util.HashSet; +import java.util.Set; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class PrintRuleNameListRegx { + + public static void main(String[] args) { + if (args.length != 1) { + System.out.println("Usage: java GrammarRuleExtractor "); + return; + } + + String filePath = args[0]; + Set ruleNames = new HashSet<>(); + + try (BufferedReader br = new BufferedReader(new FileReader(filePath))) { + StringBuilder content = new StringBuilder(); + String line; + while ((line = br.readLine()) != null) { + content.append(line).append("\n"); + } + + // Updated pattern to handle multi-line rules + Pattern rulePattern = Pattern.compile("(?m)^\\s*([a-zA-Z_][a-zA-Z0-9_]*)\\s*:"); + + Matcher matcher = rulePattern.matcher(content.toString()); + while (matcher.find()) { + ruleNames.add(matcher.group(1)); + } + + System.out.println("Extracted Rules:"); + for (String rule : ruleNames) { + System.out.println(rule); + } + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/developer/test/combined_output.txt b/developer/test/combined_output.txt deleted file mode 100644 index e69de29..0000000