--- /dev/null
+# GQL_to_Cypher makefile
+
+#================================================================================
+# Setup the environment
+#
+# Use `make variable` to print the value assigned to the variables in this section
+
+#----------------------------------------
+# some notes about setting variables. Save yourself some grief by reading this.
+#
+
+# An example of setting a make variable. Embedded and trailing spaces are
+# included in the value, there are 4 of each present in the value for
+# ISLAND. Leading spaces are not included. If there is a comment starting with
+# a hash, the trailing spaces leading up to it the hash will be included in the
+# value. A `:=` will evaluate immediately. A `=` will evaluate at point of variable
+# expansion.
+ISLAND := land island
+
+# Note these abbreviations:
+# FL = File List, out file lists are those we want make to create
+# DL = Directory List
+
+#----------------------------------------
+# programs used by this makefile
+#
+JAVA_COMP := $(JAVA_HOME)/bin/javac
+JAVA_INTERP := $(JAVA_HOME)/bin/java
+JAVA_ARCHIVE := $(JAVA_HOME)/bin/jar
+
+#----------------------------------------
+# programs being built by this makefile:
+#
+PRINT_RULE_NAME_LIS := PrintRuleNameList
+SYNTAX_TREE_TEST := SyntaxTree_Test
+SYNTAX_TREE_20240412 := SyntaxTree_20240412
+# put your version here
+
+PROGRAM_LIST := $(PRINT_RULE_NAME_LIST) $(SYNTAX_TREE_TEST) $(SYNTAX_TREE_20240412)
+
+#----------------------------------------
+# ANTLR environment
+
+# ANTLR directories
+ANTLR_IN_DIR := ANTLR
+ANTLR_OUT_DIR := javac/ANTLR
+ANTLR_OUT_DIR_PARENT := javac
+
+# ANTLR input files
+ANTLR_IN_FL := $(wildcard $(ANTLR_IN_DIR)/*.g4)
+ifneq ($(strip $(ANTLR_IN_FL)),)
+ ($info empty ANTLR_IN_FL)
+endif
+
+# ANTLR will produce these output files.
+
+# This function accepts a grammar name, or a grammar name with an extension;
+# and sets a variable of the form ANTLR_OUT_<grammar>_FL to a list of
+# files that ANTLR would produce for <grammar>.
+define set_ANTLR_out_fl_var
+ ANTLR_OUT_$(basename $(notdir $1))_FL := \
+ $(ANTLR_OUT_DIR)/$(basename $(notdir $1))Lexer.java \
+ $(ANTLR_OUT_DIR)/$(basename $(notdir $1))Parser.java \
+ $(ANTLR_OUT_DIR)/$(basename $(notdir $1))BaseVisitor.java \
+ $(ANTLR_OUT_DIR)/$(basename $(notdir $1))Visitor.java
+endef
+
+# Generate an ANTLR_OUT_<grammar>_FL and set it, for each grammar
+$(foreach file,$(ANTLR_IN_FL),$(eval $(call set_ANTLR_out_fl_var,$(file))))
+
+# Combine all individual file lists into ANTLR_OUT_FL
+ANTLR_OUT_FL := $(foreach file,$(ANTLR_IN_FL),$(value ANTLR_OUT_$(basename $(notdir $(file)))_FL))
+
+
+#----------------------------------------
+# Java environment
+
+# JAVA directories
+JAVA_COMP_IN_PRIMARY_DIR := javac
+JAVA_COMP_IN_ANTLR_DIR := $(ANTLR_OUT_DIR)
+JAVA_COMP_IN_DL := $(JAVA_COMP_IN_PRIMARY_DIR):$(JAVA_COMP_IN_ANTLR_DIR)
+JAVA_COMP_OUT_DIR := jvm
+
+# JAVA input files
+JAVA_COMP_IN_PRIMARY_FL := $(wildcard $(JAVA_COMP_IN_PRIMARY_DIR)/*.java)
+JAVA_COMP_IN_ANTLR_FL := $(ANTLR_OUT_FL)
+JAVA_COMP_IN_FL := $(JAVA_COMP_IN_PRIMARY_FL) $(JAVA_COMP_IN_ANTLR_FL)
+
+# JAVA will produce these output files
+JAVA_COMP_OUT_PRIMARY_FL := $(patsubst $(JAVA_COMP_IN_PRIMARY_DIR)/%.java,$(JVM_IN_DIR)/%.class,$(JAVA_COMP_IN_PRIMARY_FL))
+JAVA_COMP_OUT_ANTLR_FL := $(patsubst $(JAVA_COMP_IN_ANTLR_DIR)/%.java,$(JVM_IN_DIR)/%.class,$(JAVA_COMP_IN_ANTLR_FL))
+JAVA_COMP_OUT_FL := $(JAVA_COMP_OUT_PRIMARY_FL) $(JAVA_COMP_OUT_ANTLR_FL)
+
+#----------------------------------------
+# JVM environment
+
+JVM_IN_DIR := $(JAVA_COMP_OUT_DIR)
+CLASSPATH := $(CLASSPATH):$(JVM_IN_DIR)
+export CLASSPATH
+
+
+#================================================================================
+# Make targets
+#
+
+# The general make everything targets:
+all: setup $(PROGRAM_LIST)
+grammar: setup $(ANTLR_OUT_FL)
+
+# specific programs or program versions:
+PrintRuleNameList: PrintRuleNameList.jar
+SyntaxTree_Test: $(ANTLR_OUT_SyntaxTree_Test_FL) SyntaxTree_Test.jar
+SyntaxTree_20240412: $(ANTLR_OUT_SyntaxTree_20240412_FL) SyntaxTree_20240412.jar
+
+# Specific grammar targets. Run them like this:
+# > make <grammar_name>
+# e.g. > make GQL_test
+# Specific grammar targets. Run them like this:
+# > make <grammar_name>
+# e.g. > make GQL_test
+
+# Specific grammar targets. Run them like this:
+# > make <grammar_name>
+# e.g. > make GQL_test
+define generate_grammar_target
+grammar_name := $(basename $(notdir $1))
+$(info Generating target: $(grammar_name) with dependencies: $(value ANTLR_OUT_$(grammar_name)_FL))
+$(basename $(notdir $1)): $(value ANTLR_OUT_$(basename $(notdir $1))_FL)
+endef
+$(foreach file,$(ANTLR_IN_FL),$(eval $(call generate_grammar_target,$(file))))
+
+
+# Compile all the .java files.
+java: setup $(JAVA_COMP_OUT_FL)
+
+# print out all variables within quotes so that spaces can be detected
+.PHONY: variable
+variable:
+ $(info ISLAND is '$(ISLAND)')
+
+ $(info PRINT_RULE_NAME_LIST is '$(PRINT_RULE_NAME_LIST)')
+ $(info SYNTAX_TREE_TEST is '$(SYNTAX_TREE_TEST)')
+ $(info SYNTAX_TREE_20240412 is '$(SYNTAX_TREE_20240412)')
+ $(info PROGRAM_LIST is '$(PROGRAM_LIST)')
+
+ $(info JAVA_COMP is '$(JAVA_COMP)')
+ $(info JAVA_INTERP is '$(JAVA_INTERP)')
+ $(info JAVA_ARCHIVE is '$(JAVA_ARCHIVE)')
+
+ $(info ANTLR_IN_DIR is '$(ANTLR_IN_DIR)')
+ $(info ANTLR_OUT_DIR is '$(ANTLR_OUT_DIR)')
+ $(info ANTLR_OUT_DIR_PARENT is '$(ANTLR_OUT_DIR_PARENT)')
+ $(info ANTLR_IN_FL is '$(ANTLR_IN_FL)')
+ $(foreach file,$(ANTLR_IN_FL),$(info ANTLR_OUT_$(basename $(notdir $(file)))_FL is '$(value ANTLR_OUT_$(basename $(notdir $(file)))_FL)'))
+ $(info ANTLR_OUT_FL is '$(ANTLR_OUT_FL)')
+
+ $(info JAVA_COMP_IN_PRIMARY_DIR is '$(JAVA_COMP_IN_PRIMARY_DIR)')
+ $(info JAVA_COMP_IN_ANTLR_DIR is '$(JAVA_COMP_IN_ANTLR_DIR)')
+ $(info JAVA_COMP_IN_DL is '$(JAVA_COMP_IN_DL)')
+ $(info JAVA_COMP_OUT_DIR is '$(JAVA_COMP_OUT_DIR)')
+
+ $(info JAVA_COMP_IN_PRIMARY_FL is '$(JAVA_COMP_IN_PRIMARY_FL)')
+ $(info JAVA_COMP_IN_ANTLR_FL is '$(JAVA_COMP_IN_ANTLR_FL)')
+ $(info JAVA_COMP_IN_FL is '$(JAVA_COMP_IN_FL)')
+
+ $(info JAVA_COMP_OUT_PRIMARY_FL is '$(JAVA_COMP_OUT_PRIMARY_FL)')
+ $(info JAVA_COMP_OUT_ANTLR_FL is '$(JAVA_COMP_OUT_ANTLR_FL)')
+ $(info JAVA_COMP_OUT_FL is '$(JAVA_COMP_OUT_FL)')
+
+ $(info JVM_IN_DIR is '$(JVM_IN_DIR)')
+ $(info CLASSPATH is '$(CLASSPATH)')
+ @:
+
+.PHONY: version
+version:
+ $(info ANTLR_JAR is '$(notdir $(ANTLR_JAR))')
+ @ $(JAVA_COMP) --version
+ @ $(JAVA_ARCHIVE) --version
+ @ make -v | head -n 1
+ @ echo "makefile 0.1"
+
+.PHONY: setup
+setup:
+ # ANTLR automatically creates $(ANTLR_OUT_DIR)
+ mkdir -p $(ANTLR_IN_DIR) $(JAVA_COMP_IN_PRIMARY_DIR) $(JVM_IN_DIR)
+ mkdir -p test deprecated experiment documentation temporary
+
+.PHONY: clean
+clean:
+ @if [ -n "$(JVM_IN_DIR)" ]; then \
+ echo "Cleaning $(JVM_IN_DIR)"; \
+ rm -rf $(JVM_IN_DIR)/*; \
+ else \
+ echo "Warning: JVM_IN_DIR is not set"; \
+ fi
+ @if [ -n "$(ANTLR_OUT_DIR)" ]; then \
+ echo "Cleaning $(ANTLR_OUT_DIR)"; \
+ rm -rf $(ANTLR_OUT_DIR); \
+ else \
+ echo "Warning: ANTLR_OUT_DIR is not set"; \
+ fi
+ @if [ -d "temporary" ]; then \
+ echo "Cleaning temporary directory"; \
+ rm -rf temporary/*; \
+ else \
+ echo "Warning: temporary directory does not exist"; \
+ fi
+
+#================================================================================
+# recipes
+
+# ANTLR a run of any of these will make all the files
+$(ANTLR_OUT_DIR)/%Lexer.java: $(ANTLR_IN_DIR)/%.g4
+ @echo "making grammar from:" $<
+ $(JAVA_INTERP) -jar $(ANTLR_JAR) -Dlanguage=Java -visitor -o $(ANTLR_OUT_DIR_PARENT) $<
+
+$(ANTLR_OUT_DIR)/%Parser.java: $(ANTLR_IN_DIR)/%.g4
+ @echo "making grammar from:" $<
+ $(JAVA_INTERP) -jar $(ANTLR_JAR) -Dlanguage=Java -visitor -o $(ANTLR_OUT_DIR_PARENT) $<
+
+$(ANTLR_OUT_DIR)/%BaseVisitor.java: $(ANTLR_IN_DIR)/%.g4
+ @echo "making grammar from:" $<
+ $(JAVA_INTERP) -jar $(ANTLR_JAR) -Dlanguage=Java -visitor -o $(ANTLR_OUT_DIR_PARENT) $<
+
+$(ANTLR_OUT_DIR)/%Visitor.java: $(ANTLR_IN_DIR)/%.g4
+ @echo "making grammar from:" $<
+ $(JAVA_INTERP) -jar $(ANTLR_JAR) -Dlanguage=Java -visitor -o $(ANTLR_OUT_DIR_PARENT) $<
+
+# Generic recipe for building .jar files and placing scripts in the executor directory
+$(JAVA_COMP_OUT_DIR)/%.jar: $(JAVA_COMP_IN_PRIMARY_DIR)/%.java
+ @echo "Building $*..."
+ $(JAVA_COMP) -d $(JAVA_COMP_OUT_DIR) -sourcepath $(JAVA_COMP_IN_DL) $<
+ $(JAVA_ARCHIVE) cf $@ -C $(JVM_IN_DIR) $*.class
+ @echo "Creating script for $*..."
+ echo "#!/usr/bin/env bash\n$(JAVA_INTERP) -cp $@ $*" > executor/$*.sh
+ chmod +x executor/$*.sh
+
--- /dev/null
+Here's the list of rules found in the GQL_20240412.g4 file:
+
+transactionMode
+transactionAccessMode
+rollbackCommand
+commitCommand
+nestedProcedureSpecification
+procedureSpecification
+nestedDataModifyingProcedureSpecification
+nestedQuerySpecification
+procedureBody
+bindingVariableDefinitionBlock
+bindingVariableDefinition
+statementBlock
+statement
+nextStatement
+graphVariableDefinition
+optTypedGraphInitializer
+graphInitializer
+bindingTableVariableDefinition
+optTypedBindingTableInitializer
+bindingTableInitializer
+valueVariableDefinition
+optTypedValueInitializer
+valueInitializer
+graphExpression
+currentGraph
+bindingTableExpression
+nestedBindingTableQuerySpecification
+objectExpressionPrimary
+linearCatalogModifyingStatement
+simpleCatalogModifyingStatement
+primitiveCatalogModifyingStatement
+createSchemaStatement
+dropSchemaStatement
+createGraphStatement
+openGraphType
+ofGraphType
+graphTypeLikeGraph
+graphSource
+dropGraphStatement
+createGraphTypeStatement
+graphTypeSource
+copyOfGraphType
+dropGraphTypeStatement
+callCatalogModifyingProcedureStatement
+linearDataModifyingStatement
+focusedLinearDataModifyingStatement
+focusedLinearDataModifyingStatementBody
+focusedNestedDataModifyingProcedureSpecification
+ambientLinearDataModifyingStatement
+ambientLinearDataModifyingStatementBody
+simpleLinearDataAccessingStatement
+simpleDataModifyingStatement
+primitiveDataModifyingStatement
+insertStatement
+setStatement
+setItemList
+setItem
+setPropertyItem
+setAllPropertiesItem
+setLabelItem
+removeStatement
+removeItemList
+removeItem
+removePropertyItem
+removeLabelItem
+deleteStatement
+deleteItemList
+deleteItem
+callDataModifyingProcedureStatement
+compositeQueryStatement
+compositeQueryExpression
+queryConjunction
+setOperator
+compositeQueryPrimary
+linearQueryStatement
+focusedLinearQueryStatement
+focusedLinearQueryStatementBody
+focusedNestedQuerySpecification
+ambientLinearQueryStatement
+ambientLinearQueryStatementBody
+nestedLinearQuerySpecification
+simpleQuerySpecification
+simpleQueryPrimary
+callDataAccessingProcedureStatement
+ambientDataModifyingProcedureStatement
+ambientQuerySpecification
+ambientQueryPrimary
+simpleQuerySpecificationBody
+simpleQueryPrimaryExpression
+simpleQueryBodyExpression
+compoundQuerySpecification
+ambientLinearQuerySpecification
+simpleDataAccessingStatement
+ambientDataModifyingStatement
+ambientLinearDataModifyingSpecification
+simpleDataAccessingSpecification
+ambientDataModifyingStatementBody
+simpleDataModifyingSpecification
+ambientLinearDataModifyingStatementBody
+simpleLinearDataModifyingSpecification
+focusedLinearDataModifyingSpecification
+focusedDataModifyingSpecification
+focusedLinearDataModifyingStatementBodyExpression
+focusedLinearQuerySpecification
+simpleLinearQuerySpecification
+focusedLinearQuerySpecificationBody
+simpleLinearQuerySpecificationBody
+focusedLinearQuerySpecificationBodyExpression
+simpleLinearQuerySpecificationBodyExpression
+compoundQueryBody
+compoundQueryExpression
+compoundQueryExpressionPart
+queryPrimary
+queryExpression
+queryTerm
+query
+querySpecification
+queryExpressionBody
+simpleQueryExpression
+simpleQuerySpecificationBodyExpression
+simpleQuerySpecificationBodyExpressionPart
+compoundQuerySpecificationBodyExpression
+compoundQuerySpecificationBodyExpressionPart
+simpleQuerySpecificationBodyPart
+simpleQuerySpecificationBodyExpressionPart
+simpleQuerySpecificationBodyExpression
+queryPrimaryExpression
+queryExpressionPart
+queryExpressionBodyPart
+queryExpressionPrimary
+queryExpressionTerm
+queryExpressionPrimaryExpression
+queryExpressionPrimaryExpressionPart
+queryExpressionPrimaryExpressionBody
+queryExpressionPrimaryExpressionTerm
+queryExpressionPrimaryExpressionBodyPart
+queryExpressionPrimaryExpressionPrimary
+queryExpressionPrimaryExpressionTermPart
+queryExpressionPrimaryExpressionPrimaryPart
+simpleQueryExpressionPrimary
+simpleQueryExpressionPrimaryPart
+simpleQueryExpressionPrimaryBody
+simpleQueryExpressionPrimaryTerm
+simpleQueryExpressionPrimaryBodyPart
+simpleQueryExpressionPrimaryPrimary
+simpleQueryExpressionPrimaryPrimaryPart
+simpleQueryExpressionPrimaryTermPart
+simpleQueryExpressionPrimaryBodyPrimary
+simpleQueryExpressionPrimaryBodyTerm
+simpleQueryExpressionPrimaryBodyPrimaryPart
+simpleQueryExpressionPrimaryBodyTermPart
+simpleQueryExpressionPrimaryBodyExpression
+simpleQueryExpressionPrimaryBodyExpressionPart
+simpleQueryExpressionPrimaryBodyExpressionBody
+simpleQueryExpressionPrimaryBodyExpressionTerm
+simpleQueryExpressionPrimaryBodyExpressionBodyPart
+simpleQueryExpressionPrimaryBodyExpressionTermPart
+simpleQueryExpressionPrimaryBodyExpressionPrimary
+simpleQueryExpressionPrimaryBodyExpressionPrimaryPart
+simpleQueryExpressionPrimaryBodyExpressionPrimaryBody
+simpleQueryExpressionPrimaryBodyExpressionPrimaryBodyPart
+simpleQueryExpressionPrimaryBodyExpressionPrimaryBodyTerm
+simpleQueryExpressionPrimaryBodyExpressionPrimaryBodyPartTerm
+simpleQueryExpressionPrimaryBodyExpressionPrimaryBodyPrimary
+simpleQueryExpressionPrimaryBodyExpressionPrimaryBodyPrimaryPart
+simpleQueryExpressionPrimaryBodyExpressionPrimaryBodyPrimaryBody
+simpleQueryExpressionPrimaryBodyExpressionPrimaryBodyPrimaryBodyPart
+simpleQueryExpressionPrimaryBodyExpressionPrimaryBodyPrimaryBodyTerm
+simpleQueryExpressionPrimaryBodyExpressionPrimaryBodyPrimaryBodyPartTerm
+simpleQueryExpressionPrimaryBodyExpressionPrimaryBodyPrimaryBodyPrimary
+simpleQueryExpressionPrimaryBodyExpressionPrimaryBodyPrimaryBodyPrimaryPart
+simpleQueryExpressionPrimaryBodyExpressionPrimaryBodyPrimaryBodyPrimaryBody
+simpleQueryExpressionPrimaryBodyExpressionPrimaryBodyPrimaryBodyPrimaryBodyPart
+simpleQueryExpressionPrimaryBodyExpressionPrimaryBodyPrimaryBodyPrimaryBodyTerm
+simpleQueryExpressionPrimaryBodyExpressionPrimaryBodyPrimaryBodyPrimaryBodyPartTerm
+simpleQueryExpressionPrimaryBodyExpressionPrimaryBodyPrimaryBodyPrimaryBodyPrimary
+simpleQueryExpressionPrimaryBodyExpressionPrimaryBodyPrimaryBodyPrimaryBodyPrimaryPart
+simpleQueryExpressionPrimaryBodyExpressionPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBody
+simpleQueryExpressionPrimaryBodyExpressionPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPart
+simpleQueryExpressionPrimaryBodyExpressionPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyTerm
+simpleQueryExpressionPrimaryBodyExpressionPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPartTerm
+simpleQueryExpressionPrimaryBodyExpressionPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimary
+simpleQueryExpressionPrimaryBodyExpressionPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryPart
+simpleQueryExpressionPrimaryBodyExpressionPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBody
+simpleQueryExpressionPrimaryBodyExpressionPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPart
+simpleQueryExpressionPrimaryBodyExpressionPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyTerm
+simpleQueryExpressionPrimaryBodyExpressionPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPartTerm
+simpleQueryExpressionPrimaryBodyExpressionPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimary
+simpleQueryExpressionPrimaryBodyExpressionPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryPart
+simpleQueryExpressionPrimaryBodyExpressionPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBody
+simpleQueryExpressionPrimaryBodyExpressionPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPart
+simpleQueryExpressionPrimaryBodyExpressionPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyTerm
+simpleQueryExpressionPrimaryBodyExpressionPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPartTerm
+simpleQueryExpressionPrimaryBodyExpressionPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimary
+simpleQueryExpressionPrimaryBodyExpressionPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryPart
+simpleQueryExpressionPrimaryBodyExpressionPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBody
+simpleQueryExpressionPrimaryBodyExpressionPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPart
+simpleQueryExpressionPrimaryBodyExpressionPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyTerm
+simpleQueryExpressionPrimaryBodyExpressionPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPartTerm
+simpleQueryExpressionPrimaryBodyExpressionPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimary
+simpleQueryExpressionPrimaryBodyExpressionPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryPart
+simpleQueryExpressionPrimaryBodyExpressionPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBody
+simpleQueryExpressionPrimaryBodyExpressionPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPart
+simpleQueryExpressionPrimaryBodyExpressionPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyTerm
+simpleQueryExpressionPrimaryBodyExpressionPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPrimaryBodyPartTerm
+simpleQueryExpressionPrimaryBodyExpressionPrimaryBodyPrimaryBodyPrimaryBodyPrimary
+
+
+
+
+
+
+
--- /dev/null
+/*
+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 MakeRuleNameList {
+
+ public static void main(String[] args) {
+ if (args.length != 1) {
+ System.out.println("Usage: java GrammarRuleExtractor <path-to-g4-file>");
+ return;
+ }
+
+ String filePath = args[0];
+ Set<String> ruleNames = new HashSet<>();
+
+ try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
+ String line;
+ Pattern rulePattern = Pattern.compile("^([a-zA-Z_][a-zA-Z0-9_]*)\\s*:");
+
+ while ((line = br.readLine()) != null) {
+ Matcher matcher = rulePattern.matcher(line);
+ if (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();
+ }
+ }
+}
return sb.toString();
}
+ @Override
+ public String visitGeneralLogarithmFunction(GQL_20240412Parser.GeneralLogarithmFunctionContext ctx) {
+ return visitChildren(ctx);
+ }
+
+ @Override
+ public String visitGeneralLogarithmBase(GQL_20240412Parser.GeneralLogarithmBaseContext ctx) {
+ return visitChildren(ctx);
+ }
+
+ @Override
+ public String visitGeneralLogarithmArgument(GQL_20240412Parser.GeneralLogarithmArgumentContext ctx) {
+ return visitChildren(ctx);
+ }
+
+ @Override
+ public String visitCommonLogarithm(GQL_20240412Parser.CommonLogarithmContext ctx) {
+ return visitChildren(ctx);
+ }
+
+ @Override
+ public String visitNaturalLogarithm(GQL_20240412Parser.NaturalLogarithmContext ctx) {
+ return visitChildren(ctx);
+ }
+
+ @Override
+ public String visitExponentialFunction(GQL_20240412Parser.ExponentialFunctionContext ctx) {
+ return visitChildren(ctx);
+ }
+
+ @Override
+ public String visitPowerFunction(GQL_20240412Parser.PowerFunctionContext ctx) {
+ return visitChildren(ctx);
+ }
+
+ @Override
+ public String visitNumericValueExpressionBase(GQL_20240412Parser.NumericValueExpressionBaseContext ctx) {
+ return visitChildren(ctx);
+ }
+
+ @Override
+ public String visitNumericValueExpressionExponent(GQL_20240412Parser.NumericValueExpressionExponentContext ctx) {
+ return visitChildren(ctx);
+ }
+
+ @Override
+ public String visitNumericValueExpressionFactor(GQL_20240412Parser.NumericValueExpressionFactorContext ctx) {
+ return visitChildren(ctx);
+ }
+
+ @Override
+ public String visitNumericValueExpressionSummand(GQL_20240412Parser.NumericValueExpressionSummandContext ctx) {
+ return visitChildren(ctx);
+ }
+
+ @Override
+ public String visitNumericValueExpression(GQL_20240412Parser.NumericValueExpressionContext ctx) {
+ return visitChildren(ctx);
+ }
+
+ @Override
+ public String visitBooleanValueExpressionBase(GQL_20240412Parser.BooleanValueExpressionBaseContext ctx) {
+ return visitChildren(ctx);
+ }
+
+ @Override
+ public String visitBooleanValueExpressionFactor(GQL_20240412Parser.BooleanValueExpressionFactorContext ctx) {
+ return visitChildren(ctx);
+ }
+
+ @Override
+ public String visitBooleanValueExpressionSummand(GQL_20240412Parser.BooleanValueExpressionSummandContext ctx) {
+ return visitChildren(ctx);
+ }
+
+ @Override
+ public String visitBooleanValueExpression(GQL_20240412Parser.BooleanValueExpressionContext ctx) {
+ return visitChildren(ctx);
+ }
+
+ @Override
+ public String visitFieldPath(GQL_20240412Parser.FieldPathContext ctx) {
+ return visitChildren(ctx);
+ }
+
+ @Override
+ public String visitNodeLabel(GQL_20240412Parser.NodeLabelContext ctx) {
+ return visitChildren(ctx);
+ }
+
+ @Override
+ public String visitEdgeLabel(GQL_20240412Parser.EdgeLabelContext ctx) {
+ return visitChildren(ctx);
+ }
+
+ @Override
+ public String visitLabel(GQL_20240412Parser.LabelContext ctx) {
+ return visitChildren(ctx);
+ }
+
+ @Override
+ public String visitNodeType(GQL_20240412Parser.NodeTypeContext ctx) {
+ return visitChildren(ctx);
+ }
+
+ @Override
+ public String visitEdgeType(GQL_20240412Parser.EdgeTypeContext ctx) {
+ return visitChildren(ctx);
+ }
+
+ @Override
+ public String visitType(GQL_20240412Parser.TypeContext ctx) {
+ return visitChildren(ctx);
+ }
+
+ @Override
+ public String visitFieldName(GQL_20240412Parser.FieldNameContext ctx) {
+ return visitChildren(ctx);
+ }
+
+ @Override
+ public String visitNodeName(GQL_20240412Parser.NodeNameContext ctx) {
+ return visitChildren(ctx);
+ }
+
+ @Override
+ public String visitEdgeName(GQL_20240412Parser.EdgeNameContext ctx) {
+ return visitChildren(ctx);
+ }
+
+ @Override
+ public String visitAliasName(GQL_20240412Parser.AliasNameContext ctx) {
+ return visitChildren(ctx);
+ }
+
+ @Override
+ public String visitTypeName(GQL_20240412Parser.TypeNameContext ctx) {
+ return visitChildren(ctx);
+ }
+
+ @Override
+ public String visitLabelName(GQL_20240412Parser.LabelNameContext ctx) {
+ return visitChildren(ctx);
+ }
+
+ @Override
+ public String visitNonTypeName(GQL_20240412Parser.NonTypeNameContext ctx) {
+ return visitChildren(ctx);
+ }
+
+ @Override
+ public String visitTypeVariableName(GQL_20240412Parser.TypeVariableNameContext ctx) {
+ return visitChildren(ctx);
+ }
+
+ @Override
+ public String visitFieldVariableName(GQL_20240412Parser.FieldVariableNameContext ctx) {
+ return visitChildren(ctx);
+ }
+
+ @Override
+ public String visitNodeVariableName(GQL_20240412Parser.NodeVariableNameContext ctx) {
+ return visitChildren(ctx);
+ }
+
+ @Override
+ public String visitEdgeVariableName(GQL_20240412Parser.EdgeVariableNameContext ctx) {
+ return visitChildren(ctx);
+ }
+
+ @Override
+ public String visitVariableName(GQL_20240412Parser.VariableNameContext ctx) {
+ return visitChildren(ctx);
+ }
+
+ @Override
+ public String visitDatabaseName(GQL_20240412Parser.DatabaseNameContext ctx) {
+ return visitChildren(ctx);
+ }
+
+ @Override
+ public String visitDateString(GQL_20240412Parser.DateStringContext ctx) {
+ return visitChildren(ctx);
+ }
+
+ @Override
+ public String visitTimeString(GQL_20240412Parser.TimeStringContext ctx) {
+ return visitChildren(ctx);
+ }
+
+ @Override
+ public String visitDatetimeString(GQL_20240412Parser.DatetimeStringContext ctx) {
+ return visitChildren(ctx);
+ }
+
+ @Override
+ public String visitDurationLiteral(GQL_20240412Parser.DurationLiteralContext ctx) {
+ return visitChildren(ctx);
+ }
+
+ @Override
+ public String visitDurationString(GQL_20240412Parser.DurationStringContext ctx) {
+ return visitChildren(ctx);
+ }
+
+ @Override
+ public String visitNodeSynonym(GQL_20240412Parser.NodeSynonymContext ctx) {
+ return visitChildren(ctx);
+ }
+
+ @Override
+ public String visitEdgesSynonym(GQL_20240412Parser.EdgesSynonymContext ctx) {
+ return visitChildren(ctx);
+ }
+
+ @Override
+ public String visitEdgeSynonym(GQL_20240412Parser.EdgeSynonymContext ctx) {
+ return visitChildren(ctx);
+ }
+
@Override
public String visitNonReservedWords(GQL_20240412Parser.NonReservedWordsContext ctx) {
- // Your implementation here
return visitChildren(ctx);
}
- // Implement other methods as needed
+
}
+++ /dev/null
-import org.antlr.v4.runtime.*;
-import org.antlr.v4.runtime.tree.*;
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-
-public class SyntaxTree20240412 {
-
- // Versioned Lexer and Parser
- static final Class<?> GQL_Lexer = GQL_20240412Lexer.class;
- static final Class<?> GQL_Parser = GQL_20240412Parser.class;
-
- public static void main(String[] args) throws IOException {
- if (args.length != 1) {
- System.err.println("Usage: java SyntaxTree20240412 <input-file>");
- System.exit(1);
- }
-
- String inputFile = args[0];
- String input = new String(Files.readAllBytes(Paths.get(inputFile)));
-
- try {
- Lexer lexer = (Lexer) GQL_Lexer.getConstructor(CharStream.class).newInstance(CharStreams.fromString(input));
- CommonTokenStream tokens = new CommonTokenStream(lexer);
- Parser parser = (Parser) GQL_Parser.getConstructor(TokenStream.class).newInstance(tokens);
- Method startRule = parser.getClass().getMethod("program"); // Assuming 'program' is the start rule
- ParseTree tree = (ParseTree) startRule.invoke(parser);
-
- PrintVisitor visitor = new PrintVisitor(parser.getRuleNames());
- String syntaxTree = visitor.visit(tree);
- System.out.println(syntaxTree);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-}
--- /dev/null
+import org.antlr.v4.runtime.*;
+import org.antlr.v4.runtime.tree.*;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+
+public class SyntaxTree20240412 {
+
+ // Versioned Lexer and Parser
+ static final Class<?> GQL_Lexer = GQL_20240412Lexer.class;
+ static final Class<?> GQL_Parser = GQL_20240412Parser.class;
+
+ public static void main(String[] args) throws IOException {
+ if (args.length != 1) {
+ System.err.println("Usage: java SyntaxTree20240412 <input-file>");
+ System.exit(1);
+ }
+
+ String inputFile = args[0];
+ String input = new String(Files.readAllBytes(Paths.get(inputFile)));
+
+ try {
+ Lexer lexer = (Lexer) GQL_Lexer.getConstructor(CharStream.class).newInstance(CharStreams.fromString(input));
+ CommonTokenStream tokens = new CommonTokenStream(lexer);
+ Parser parser = (Parser) GQL_Parser.getConstructor(TokenStream.class).newInstance(tokens);
+ Method startRule = parser.getClass().getMethod("program"); // Assuming 'program' is the start rule
+ ParseTree tree = (ParseTree) startRule.invoke(parser);
+
+ PrintVisitor visitor = new PrintVisitor(parser.getRuleNames());
+ String syntaxTree = visitor.visit(tree);
+ System.out.println(syntaxTree);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+}
# GQL_to_Cypher makefile
-#--------------------------------------------------------------------------------
+#================================================================================
# Setup the environment
#
-# Use `make variable` to print the value assigned to the variables in this section
+# Use `make variable` to print the value assigned to each variable in this section
-# An example. Embedded and trailing spaces are included in the value, there are
-# 4 of each present in the value for ISLAND. Leading spaces are not included.
-# If there is a comment starting with a hash, the trailing spaces leading up to
-# it are included.
-ISLAND := land island
+#----------------------------------------
+# some notes about setting variables. Save yourself some grief by reading this.
+#
+
+# Note these suffixes:
+# _FL = File List
+# _FPL = File Path List
+# _DL = Directory List
+
+# _PRIMARY means these are primary inputs, this makefile does not build them
+# _IN program inputs
+# _OUT expected program outputs
-# Note these abreviations:
-# FL = File List, out file lists are those we want make to create
-# DL = Directory List
+# The following is an example of setting a variable. Use `make variable`
+# to prints its value, and note the embedded and trailing spaces.
+ISLAND := land island
+#----------------------------------------
# programs used by this makefile
+#
JAVA_COMP := $(JAVA_HOME)/bin/javac
JAVA_INTERP := $(JAVA_HOME)/bin/java
JAVA_ARCHIVE := $(JAVA_HOME)/bin/jar
+#----------------------------------------
+# programs being built by this makefile:
+#
+PRINT_RULE_NAME_LIST := PrintRuleNameList
+SYNTAX_TREE_TEST := SyntaxTree_Test
+SYNTAX_TREE_20240412 := SyntaxTree_20240412
+
+PROGRAM_LIST := $(PRINT_RULE_NAME_LIST) $(SYNTAX_TREE_TEST) $(SYNTAX_TREE_20240412)
+
+#----------------------------------------
+# ANTLR environment
+# Add a `<grammar>.g4` file into the ANTLR_IN_DIR
+
# ANTLR directories
-ANTLR_IN_DIR := ANTLR
-ANTLR_OUT_DIR := javac/ANTLR
+ANTLR_PRIMARY_DIR := ANTLR
+ANTLR_IN_DIR := $(ANTLR_PRIMARY_DIR)
+ANTLR_OUT_DIR := javac/ANTLR
ANTLR_OUT_DIR_PARENT := javac
-# ANTLR files
-ANTLR_IN_FL := $(wildcard $(ANTLR_IN_DIR)/*.g4)
-ANTLR_OUT_FL := $(patsubst $(ANTLR_IN_DIR)/%.g4,$(ANTLR_OUT_DIR)/%.java,$(ANTLR_IN_FL))
-# JAVA directories
-JAVAC_IN_PRIMARY_DIR := javac
-JAVAC_IN_ANTLR_DIR := $(ANTLR_OUT_DIR)
-JAVAC_IN_DL := $(JAVAC_IN_PRIMARY_DIR) $(JAVAC_IN_ANTLR_DIR)
-JVM_IN_DIR := jvm
+# ANTLR input files
+ANTLR_IN_FPL := $(wildcard $(ANTLR_IN_DIR)/*.g4)
+ANTLR_GRAMMAR_LIST := $(basename $(notdir $(ANTLR_IN_FPL)))
+ifeq ($(strip $(ANTLR_IN_FPL)),)
+ $(info No ANTLR input grammar files found)
+endif
+
+# ANTLR will produce these output files.
-# JAVA files
-JAVAC_IN_PRIMARY_FL := $(wildcard $(JAVAC_IN_PRIMARY_DIR)/*.java)
-JAVAC_IN_ANTLR_FL := $(ANTLR_OUT_FL)
-JAVAC_IN_FL := $(JAVAC_IN_PRIMARY_FL) $(JAVAC_IN_ANTLR_FL)
+# This function accepts a grammar name, or a grammar name with an extension;
+# and sets a variable of the form ANTLR_OUT_<grammar>_FPL to a list of
+# files that ANTLR would produce for <grammar>.
+define set_ANTLR_out_fpl_var
+ ANTLR_OUT_$(basename $1)_FPL := \
+ $(ANTLR_OUT_DIR)/$(basename $1)Lexer.java \
+ $(ANTLR_OUT_DIR)/$(basename $1)Parser.java \
+ $(ANTLR_OUT_DIR)/$(basename $1)BaseVisitor.java \
+ $(ANTLR_OUT_DIR)/$(basename $1)Visitor.java
+endef
-JAVAC_OUT_PRIMARY_FL := $(patsubst $(JAVAC_IN_PRIMARY_DIR)/%.java,$(JVM_IN_DIR)/%.class,$(JAVAC_IN_PRIMARY_FL))
-JAVAC_OUT_ANTLR_FL := $(patsubst $(ANTLR_OUT_DIR)/%.java,$(JVM_IN_DIR)/%.class,$(JAVAC_IN_ANTLR_FL))
-JAVAC_OUT_FL := $(JAVAC_OUT_PRIMARY_FL) $(JAVAC_OUT_ANTLR_FL)
+# Generate ANTLR_OUT_<grammar>_FPL for each grammar
+$(foreach file,$(ANTLR_GRAMMAR_LIST),$(eval $(call set_ANTLR_out_fpl_var,$(file))))
-# programs we are creating
-SYNTAX_TREE_20240412 := SyntaxTree20240412
-OUT_FL := $(JVM_IN_DIR)/$(SYNTAX_TREE_20240412).jar
+# Combine all individual file lists into ANTLR_OUT_FPL
+ANTLR_OUT_FPL := $(foreach file,$(ANTLR_GRAMMAR_LIST),$(value ANTLR_OUT_$(file)_FPL))
+
+#----------------------------------------
+# Java environment
+
+# JAVA directories
+JAVA_COMP_IN_PRIMARY_DIR := javac
+JAVA_COMP_IN_ANTLR_DIR := $(ANTLR_OUT_DIR)
+JAVA_COMP_IN_DL := $(JAVA_COMP_IN_PRIMARY_DIR):$(JAVA_COMP_IN_ANTLR_DIR)
+JAVA_COMP_OUT_DIR := jvm
+# JAVA input files
+JAVA_COMP_IN_PRIMARY_FPL := $(wildcard $(JAVA_COMP_IN_PRIMARY_DIR)/*.java)
+JAVA_COMP_IN_ANTLR_FPL := $(ANTLR_OUT_FPL)
+JAVA_COMP_IN_FPL := $(JAVA_COMP_IN_PRIMARY_FPL) $(JAVA_COMP_IN_ANTLR_FPL)
-# java command CLASS directory search and source directory search
+# JAVA will produce these output files
+JAVA_COMP_OUT_PRIMARY_FPL := $(patsubst $(JAVA_COMP_IN_PRIMARY_DIR)/%.java,$(JAVA_COMP_OUT_DIR)/%.class,$(JAVA_COMP_IN_PRIMARY_FPL))
+JAVA_COMP_OUT_ANTLR_FPL := $(patsubst $(JAVA_COMP_IN_ANTLR_DIR)/%.java,$(JAVA_COMP_OUT_DIR)/%.class,$(JAVA_COMP_IN_ANTLR_FPL))
+JAVA_COMP_OUT_FPL := $(JAVA_COMP_OUT_PRIMARY_FPL) $(JAVA_COMP_OUT_ANTLR_FPL)
+
+#----------------------------------------
+# JVM environment
+
+JVM_IN_DIR := $(JAVA_COMP_OUT_DIR)
CLASSPATH := $(CLASSPATH):$(JVM_IN_DIR)
export CLASSPATH
-JAVA_IN_DL := $(JAVAC_IN_PRIMARY_DIR):$(ANTLR_OUT_DIR)
-
-#--------------------------------------------------------------------------------
-# Top level make targets
+#================================================================================
+# Make targets
#
-# compile all the programs
-# this first target is the default for make
-.PHONY: program
-program: setup $(OUT_FL)
+# The general make everything targets:
+all: setup $(PROGRAM_LIST)
+grammar: setup $(ANTLR_OUT_FPL)
+
+# specific programs or program versions:
+PrintRuleNameList: $(JAVA_COMP_OUT_DIR)/PrintRuleNameList.jar
+SyntaxTree_Test: $(ANTLR_OUT_SyntaxTree_Test_FPL) $(JAVA_COMP_OUT_DIR)/SyntaxTree_Test.jar
+SyntaxTree_20240412: $(ANTLR_OUT_SyntaxTree_20240412_FPL) $(JAVA_COMP_OUT_DIR)/SyntaxTree_20240412.jar
-# compile all the grammar files whether they are needed or not
-.PHONY: grammar
-grammar: setup $(ANTLR_OUT_FL)
+# Specific grammar targets. Run them like this:
+# > make <grammar_name>
+# e.g. > make GQL_test
+$(foreach grammar,$(ANTLR_GRAMMAR_LIST),$(eval $(grammar): $(value ANTLR_OUT_$(grammar)_FPL)))
-# compile all the .java files, whether they are needed or not
-.PHONY: java
-program: setup $(JAVAC_OUT_FL)
+# Compile all the .java files.
+java: setup $(JAVA_COMP_OUT_FPL)
-# print out all variables with quotes so that spaces can be detected
+# print out all variables within quotes so that spaces can be detected
.PHONY: variable
variable:
$(info ISLAND is '$(ISLAND)')
- $(info JAVA_HOME is '$(JAVA_HOME)')
- $(info ANTLR_JAR is '$(ANTLR_JAR)')
+ $(info PRINT_RULE_NAME_LIST is '$(PRINT_RULE_NAME_LIST)')
+ $(info SYNTAX_TREE_TEST is '$(SYNTAX_TREE_TEST)')
+ $(info SYNTAX_TREE_20240412 is '$(SYNTAX_TREE_20240412)')
+ $(info PROGRAM_LIST is '$(PROGRAM_LIST)')
$(info JAVA_COMP is '$(JAVA_COMP)')
$(info JAVA_INTERP is '$(JAVA_INTERP)')
$(info JAVA_ARCHIVE is '$(JAVA_ARCHIVE)')
+ $(info ANTLR_PRIMARY_DIR is '$(ANTLR_PRIMARY_DIR)')
$(info ANTLR_IN_DIR is '$(ANTLR_IN_DIR)')
$(info ANTLR_OUT_DIR is '$(ANTLR_OUT_DIR)')
$(info ANTLR_OUT_DIR_PARENT is '$(ANTLR_OUT_DIR_PARENT)')
- $(info ANTLR_IN_FL is '$(ANTLR_IN_FL)')
- $(info ANTLR_OUT_FL is '$(ANTLR_OUT_FL)')
+ $(info ANTLR_IN_FPL is '$(ANTLR_IN_FPL)')
+ $(info ANTLR_GRAMMAR_LIST is '$(ANTLR_GRAMMAR_LIST)')
+ $(foreach file,$(ANTLR_GRAMMAR_LIST),$(info ANTLR_OUT_$(file)_FPL is '$(value ANTLR_OUT_$(file)_FPL)'))
+ $(info ANTLR_OUT_FPL is '$(ANTLR_OUT_FPL)')
- $(info JAVAC_IN_PRIMARY_DIR is '$(JAVAC_IN_PRIMARY_DIR)')
- $(info JAVAC_IN_ANTLR_DIR is '$(JAVAC_IN_ANTLR_DIR)')
- $(info JVM_IN_DIR is '$(JVM_IN_DIR)')
+ $(info JAVA_COMP_IN_PRIMARY_DIR is '$(JAVA_COMP_IN_PRIMARY_DIR)')
+ $(info JAVA_COMP_IN_ANTLR_DIR is '$(JAVA_COMP_IN_ANTLR_DIR)')
+ $(info JAVA_COMP_IN_DL is '$(JAVA_COMP_IN_DL)')
+ $(info JAVA_COMP_OUT_DIR is '$(JAVA_COMP_OUT_DIR)')
- $(info JAVAC_IN_PRIMARY_FL is '$(JAVAC_IN_PRIMARY_FL)')
- $(info JAVAC_IN_ANTLR_FL is '$(JAVAC_IN_ANTLR_FL)')
- $(info JAVAC_IN_FL is '$(JAVAC_IN_FL)')
+ $(info JAVA_COMP_IN_PRIMARY_FPL is '$(JAVA_COMP_IN_PRIMARY_FPL)')
+ $(info JAVA_COMP_IN_ANTLR_FPL is '$(JAVA_COMP_IN_ANTLR_FPL)')
+ $(info JAVA_COMP_IN_FPL is '$(JAVA_COMP_IN_FPL)')
- $(info JAVAC_OUT_PRIMARY_FL is '$(JAVAC_OUT_PRIMARY_FL)')
- $(info JAVAC_OUT_ANTLR_FL is '$(JAVAC_OUT_ANTLR_FL)')
- $(info JAVAC_OUT_FL is '$(JAVAC_OUT_FL)')
+ $(info JAVA_COMP_OUT_PRIMARY_FPL is '$(JAVA_COMP_OUT_PRIMARY_FPL)')
+ $(info JAVA_COMP_OUT_ANTLR_FPL is '$(JAVA_COMP_OUT_ANTLR_FPL)')
+ $(info JAVA_COMP_OUT_FPL is '$(JAVA_COMP_OUT_FPL)')
+ $(info JVM_IN_DIR is '$(JVM_IN_DIR)')
$(info CLASSPATH is '$(CLASSPATH)')
- $(info JAVA_IN_DL is '$(JAVA_IN_DL)')
@:
.PHONY: version
.PHONY: setup
setup:
# ANTLR automatically creates $(ANTLR_OUT_DIR)
- mkdir -p $(ANTLR_IN_DIR) $(JAVAC_IN_PRIMARY_DIR) $(JVM_IN_DIR)
+ mkdir -p $(ANTLR_IN_DIR) $(JAVA_COMP_IN_PRIMARY_DIR) $(JVM_IN_DIR)
mkdir -p test deprecated experiment documentation temporary
.PHONY: clean
echo "Warning: temporary directory does not exist"; \
fi
-#--------------------------------------------------------------------------------
+#================================================================================
# recipes
-ANTLR_FILES := GQL_20240412BaseListener.java GQL_20240412BaseVisitor.java GQL_20240412Lexer.java GQL_20240412Listener.java GQL_20240412Parser.java GQL_20240412Visitor.java
-
-
-# Generate ANTLR .java files
-$(ANTLR_OUT_FL): $(ANTLR_OUT_DIR)/%.java: $(ANTLR_IN_DIR)/%.g4
+# ANTLR a run of any of these will make all the files
+$(ANTLR_OUT_DIR)/%Lexer.java: $(ANTLR_IN_DIR)/%.g4
@echo "making grammar from:" $<
$(JAVA_INTERP) -jar $(ANTLR_JAR) -Dlanguage=Java -visitor -o $(ANTLR_OUT_DIR_PARENT) $<
+$(ANTLR_OUT_DIR)/%Parser.java: $(ANTLR_IN_DIR)/%.g4
+ @echo "making grammar from:" $<
+ $(JAVA_INTERP) -jar $(ANTLR_JAR) -Dlanguage=Java -visitor -o $(ANTLR_OUT_DIR_PARENT) $<
-$(JAVAC_OUT_ANTLR_FL): $(JVM_IN_DIR)/%.class: $(ANTLR_OUT_DIR)/%.java
- @echo "making class from ANTLR generated" $<
- $(JAVA_COMP) -d $(JVM_IN_DIR) -sourcepath $(JAVA_IN_DL) $(addprefix $(ANTLR_OUT_DIR)/, $(ANTLR_FILES))
+$(ANTLR_OUT_DIR)/%BaseVisitor.java: $(ANTLR_IN_DIR)/%.g4
+ @echo "making grammar from:" $<
+ $(JAVA_INTERP) -jar $(ANTLR_JAR) -Dlanguage=Java -visitor -o $(ANTLR_OUT_DIR_PARENT) $<
-# # Compile ANTLR-generated Java files
-# $(JAVAC_OUT_ANTLR_FL): $(JVM_IN_DIR)/%.class: $(ANTLR_OUT_DIR)/%.java
-# @echo "making class from ANTLR generated" $<
-# $(JAVA_COMP) -d $(JVM_IN_DIR) -sourcepath $(JAVA_IN_DL) $<
+$(ANTLR_OUT_DIR)/%Visitor.java: $(ANTLR_IN_DIR)/%.g4
+ @echo "making grammar from:" $<
+ $(JAVA_INTERP) -jar $(ANTLR_JAR) -Dlanguage=Java -visitor -o $(ANTLR_OUT_DIR_PARENT) $<
-# Compile primary Java files
-$(JAVAC_OUT_PRIMARY_FL): $(JVM_IN_DIR)/%.class: $(JAVAC_IN_PRIMARY_DIR)/%.java $(JAVAC_OUT_ANTLR_FL)
- @echo "making class from primary" $<
- $(JAVA_COMP) -d $(JVM_IN_DIR) -sourcepath $(JAVA_IN_DL) $<
+# Generic recipe for building .jar files and placing scripts in the executor directory
+$(JAVA_COMP_OUT_DIR)/%.jar: $(JAVA_COMP_IN_PRIMARY_DIR)/%.java
+ @echo "Building $*..."
+ $(JAVA_COMP) -d $(JAVA_COMP_OUT_DIR) -sourcepath $(JAVA_COMP_IN_DL) $<
+ $(JAVA_ARCHIVE) cf $@ -C $(JVM_IN_DIR) $*.class
+ @echo "Creating script for $*..."
+ echo "#!/usr/bin/env bash\n$(JAVA_INTERP) -cp $@ $*" > executor/$*.sh
+ chmod +x executor/$*.sh
-# Create JAR file
-$(JVM_IN_DIR)/$(SYNTAX_TREE_20240412).jar: $(JAVAC_OUT_FL)
- @echo "making program" $@ "from files found in" $(JVM_IN_DIR)
- $(JAVA_ARCHIVE) cvf $@ -C $(JVM_IN_DIR) .
+# LocalWords: makefile