git being git
authorThomas Walker Lynch <xtujpz@reasoningtechnology.com>
Mon, 29 Jul 2024 04:54:19 +0000 (04:54 +0000)
committerThomas Walker Lynch <xtujpz@reasoningtechnology.com>
Mon, 29 Jul 2024 04:54:19 +0000 (04:54 +0000)
developer/ANTLR/GQL.g4 [new file with mode: 0644]
developer_init [deleted file]
executor/install
executor/use_env [new file with mode: 0644]

diff --git a/developer/ANTLR/GQL.g4 b/developer/ANTLR/GQL.g4
new file mode 100644 (file)
index 0000000..46e0daf
--- /dev/null
@@ -0,0 +1,3778 @@
+grammar GQL;
+
+options { caseInsensitive = true; }
+
+// 6 <GQL-program>
+
+gqlProgram
+    : programActivity sessionCloseCommand? EOF
+    | sessionCloseCommand EOF
+    ;
+
+programActivity
+    : sessionActivity
+    | transactionActivity
+    ;
+
+sessionActivity
+    : sessionResetCommand+
+    | sessionSetCommand+ sessionResetCommand*
+    ;
+
+transactionActivity
+    : startTransactionCommand (procedureSpecification endTransactionCommand?)?
+    | procedureSpecification endTransactionCommand?
+    | endTransactionCommand
+    ;
+
+endTransactionCommand
+    : rollbackCommand
+    | commitCommand
+    ;
+
+// 7.1 <session set command>
+
+sessionSetCommand
+    : SESSION SET (sessionSetSchemaClause | sessionSetGraphClause | sessionSetTimeZoneClause | sessionSetParameterClause)
+    ;
+
+sessionSetSchemaClause
+    : SCHEMA schemaReference
+    ;
+
+sessionSetGraphClause
+    : PROPERTY? GRAPH graphExpression
+    ;
+
+sessionSetTimeZoneClause
+    : TIME ZONE setTimeZoneValue
+    ;
+
+setTimeZoneValue
+    : timeZoneString
+    ;
+
+sessionSetParameterClause
+    : sessionSetGraphParameterClause
+    | sessionSetBindingTableParameterClause
+    | sessionSetValueParameterClause
+    ;
+
+sessionSetGraphParameterClause
+    : PROPERTY? GRAPH sessionSetParameterName optTypedGraphInitializer
+    ;
+
+sessionSetBindingTableParameterClause
+    : BINDING? TABLE sessionSetParameterName optTypedBindingTableInitializer
+    ;
+
+sessionSetValueParameterClause
+    : VALUE sessionSetParameterName optTypedValueInitializer
+    ;
+
+sessionSetParameterName
+    : (IF NOT EXISTS)? sessionParameterSpecification
+    ;
+
+// 7.2 <session reset command>
+
+sessionResetCommand
+    : SESSION RESET sessionResetArguments?
+    ;
+
+sessionResetArguments
+    : ALL? (PARAMETERS | CHARACTERISTICS)
+    | SCHEMA
+    | PROPERTY? GRAPH
+    | TIME ZONE
+    | PARAMETER? sessionParameterSpecification
+    ;
+
+// 7.3 <session close command>
+
+sessionCloseCommand
+    : SESSION CLOSE
+    ;
+
+// 7.4 <session parameter specification>
+
+sessionParameterSpecification
+    : GENERAL_PARAMETER_REFERENCE
+    ;
+
+// 8.1 <start transaction command>
+
+startTransactionCommand
+    : START TRANSACTION transactionCharacteristics?
+    ;
+
+// 8.2 <transaction characteristics>
+
+transactionCharacteristics
+    : transactionMode (COMMA transactionMode)*
+    ;
+
+transactionMode
+    : transactionAccessMode
+    ;
+
+transactionAccessMode
+    : READ ONLY
+    | READ WRITE
+    ;
+
+// 8.3 <rollback command>
+
+rollbackCommand
+    : ROLLBACK
+    ;
+
+// 8.4 <commit command>
+
+commitCommand
+    : COMMIT
+    ;
+
+// 9.1 <nested procedure specification>
+
+nestedProcedureSpecification
+    : LEFT_BRACE procedureSpecification RIGHT_BRACE
+    ;
+
+// <catalog-modifying procedure specification>, <data-modifying procedure specification> and <query specification> are
+// identical productions. The specification distinguishes them in the BNF, but in the implementation, the distinction
+// has to be made sematically, in code, based on the kind of statements contained in the <procedure specification>.
+procedureSpecification
+    : procedureBody
+//    : catalogModifyingProcedureSpecification
+//    | dataModifyingProcedureSpecification
+//    | querySpecification
+    ;
+
+//catalogModifyingProcedureSpecification
+//    : procedureBody
+//    ;
+
+nestedDataModifyingProcedureSpecification
+    : LEFT_BRACE procedureBody RIGHT_BRACE
+    ;
+
+//dataModifyingProcedureSpecification
+//    : procedureBody
+//    ;
+
+nestedQuerySpecification
+    : LEFT_BRACE procedureBody RIGHT_BRACE
+    ;
+
+//querySpecification
+//    : procedureBody
+//    ;
+
+// 9.2 <procedure body>
+
+procedureBody
+    : atSchemaClause? bindingVariableDefinitionBlock? statementBlock
+    ;
+
+bindingVariableDefinitionBlock
+    : bindingVariableDefinition+
+    ;
+
+bindingVariableDefinition
+    : graphVariableDefinition
+    | bindingTableVariableDefinition
+    | valueVariableDefinition
+    ;
+
+statementBlock
+    : statement nextStatement*
+    ;
+
+statement
+    : linearCatalogModifyingStatement
+    | linearDataModifyingStatement
+    | compositeQueryStatement
+    ;
+
+nextStatement
+    : NEXT yieldClause? statement
+    ;
+
+// 10.1 <graph variable definition>
+
+graphVariableDefinition
+    : PROPERTY? GRAPH bindingVariable optTypedGraphInitializer
+    ;
+
+optTypedGraphInitializer
+    : (typed? graphReferenceValueType)? graphInitializer
+    ;
+
+graphInitializer
+    : EQUALS_OPERATOR graphExpression
+    ;
+
+// 10.2 <binding table variable definition>
+
+bindingTableVariableDefinition
+    : BINDING? TABLE bindingVariable optTypedBindingTableInitializer
+    ;
+
+optTypedBindingTableInitializer
+    : (typed? bindingTableReferenceValueType)? bindingTableInitializer
+    ;
+
+bindingTableInitializer
+    : EQUALS_OPERATOR bindingTableExpression
+    ;
+
+// 10.3 <value variable definition>
+
+valueVariableDefinition
+    : VALUE bindingVariable optTypedValueInitializer
+    ;
+
+optTypedValueInitializer
+    : (typed? valueType)? valueInitializer
+    ;
+
+valueInitializer
+    : EQUALS_OPERATOR valueExpression
+    ;
+
+// 11.1 <graph expression>
+
+graphExpression
+    : objectExpressionPrimary
+    | graphReference
+    | objectNameOrBindingVariable
+    | currentGraph
+    ;
+
+currentGraph
+    : CURRENT_PROPERTY_GRAPH
+    | CURRENT_GRAPH
+    ;
+
+// 11.2 <binding table expression>
+
+bindingTableExpression
+    : nestedBindingTableQuerySpecification
+    | objectExpressionPrimary
+    | bindingTableReference
+    | objectNameOrBindingVariable
+    ;
+
+nestedBindingTableQuerySpecification
+    : nestedQuerySpecification
+    ;
+
+// 11.3 <object expression primary>
+
+objectExpressionPrimary
+    : VARIABLE valueExpressionPrimary
+    | parenthesizedValueExpression
+    | nonParenthesizedValueExpressionPrimarySpecialCase
+    ;
+
+// 12.1 <linear catalog-modifying statement>
+
+linearCatalogModifyingStatement
+    : simpleCatalogModifyingStatement+
+    ;
+
+simpleCatalogModifyingStatement
+    : primitiveCatalogModifyingStatement
+    | callCatalogModifyingProcedureStatement
+    ;
+
+primitiveCatalogModifyingStatement
+    : createSchemaStatement
+    | dropSchemaStatement
+    | createGraphStatement
+    | dropGraphStatement
+    | createGraphTypeStatement
+    | dropGraphTypeStatement
+    ;
+
+// 12.2 <insert schema statement>
+
+createSchemaStatement
+    : CREATE SCHEMA (IF NOT EXISTS)? catalogSchemaParentAndName
+    ;
+
+// 12.3 <drop schema statement>
+
+dropSchemaStatement
+    : DROP SCHEMA (IF EXISTS)? catalogSchemaParentAndName
+    ;
+
+// 12.4 <insert graph statement>
+
+createGraphStatement
+    : CREATE (PROPERTY? GRAPH (IF NOT EXISTS)? | OR REPLACE PROPERTY? GRAPH) catalogGraphParentAndName (openGraphType | ofGraphType) graphSource?
+    ;
+
+openGraphType
+    : typed? ANY (PROPERTY? GRAPH)?
+    ;
+
+ofGraphType
+    : graphTypeLikeGraph
+    | typed? graphTypeReference
+    | typed? (PROPERTY? GRAPH)? nestedGraphTypeSpecification
+    ;
+
+graphTypeLikeGraph
+    : LIKE graphExpression
+    ;
+
+graphSource
+    : AS COPY OF graphExpression
+    ;
+
+// 12.5 <drop graph statement>
+
+dropGraphStatement
+    : DROP PROPERTY? GRAPH (IF EXISTS)? catalogGraphParentAndName
+    ;
+
+// 12.6 <graph type statement>
+
+createGraphTypeStatement
+    : CREATE (PROPERTY? GRAPH TYPE (IF NOT EXISTS)? | OR REPLACE PROPERTY? GRAPH TYPE) catalogGraphTypeParentAndName graphTypeSource
+    ;
+
+graphTypeSource
+    : AS? copyOfGraphType
+    | graphTypeLikeGraph
+    | AS? nestedGraphTypeSpecification
+    ;
+
+copyOfGraphType
+    : COPY OF graphTypeReference
+    ;
+
+// 12.7 <drop graph statement>
+
+dropGraphTypeStatement
+    : DROP PROPERTY? GRAPH TYPE (IF EXISTS)? catalogGraphTypeParentAndName
+    ;
+
+// 12.8 <call catalog-modifying statement>
+
+callCatalogModifyingProcedureStatement
+    : callProcedureStatement
+    ;
+
+// 13.1 <linear data-modifying statement>
+
+linearDataModifyingStatement
+    : focusedLinearDataModifyingStatement
+    | ambientLinearDataModifyingStatement
+    ;
+
+focusedLinearDataModifyingStatement
+    : focusedLinearDataModifyingStatementBody
+    | focusedNestedDataModifyingProcedureSpecification
+    ;
+
+focusedLinearDataModifyingStatementBody
+    : useGraphClause simpleLinearDataAccessingStatement primitiveResultStatement?
+    ;
+
+focusedNestedDataModifyingProcedureSpecification
+    : useGraphClause nestedDataModifyingProcedureSpecification
+    ;
+
+ambientLinearDataModifyingStatement
+    : ambientLinearDataModifyingStatementBody
+    | nestedDataModifyingProcedureSpecification
+    ;
+
+ambientLinearDataModifyingStatementBody
+    : simpleLinearDataAccessingStatement primitiveResultStatement?
+    ;
+
+simpleLinearDataAccessingStatement
+    : simpleQueryStatement* simpleDataModifyingStatement+
+    ;
+
+// Subsumed by previous rule to enforce 13.1 SR 5
+//simpleDataAccessingStatement
+//    : simpleQueryStatement
+//    | simpleDataModifyingStatement
+//    ;
+
+simpleDataModifyingStatement
+    : primitiveDataModifyingStatement
+    | callDataModifyingProcedureStatement
+    ;
+
+primitiveDataModifyingStatement
+    : insertStatement
+    | setStatement
+    | removeStatement
+    | deleteStatement
+    ;
+
+// 13.2 <insertStatement>
+
+insertStatement
+    : INSERT insertGraphPattern
+    ;
+
+// 13.3 <set statement>
+
+setStatement
+    : SET setItemList
+    ;
+
+setItemList
+    : setItem (COMMA setItem)*
+    ;
+
+setItem
+    : setPropertyItem
+    | setAllPropertiesItem
+    | setLabelItem
+    ;
+
+setPropertyItem
+    : bindingVariableReference PERIOD propertyName EQUALS_OPERATOR valueExpression
+    ;
+
+setAllPropertiesItem
+    : bindingVariableReference EQUALS_OPERATOR LEFT_BRACE propertyKeyValuePairList? RIGHT_BRACE
+    ;
+
+setLabelItem
+    : bindingVariableReference isOrColon labelName
+    ;
+
+// 13.4 <remove statement>
+
+removeStatement
+    : REMOVE removeItemList
+    ;
+
+removeItemList
+    : removeItem (COMMA removeItem)*
+    ;
+
+removeItem
+    : removePropertyItem
+    | removeLabelItem
+    ;
+
+removePropertyItem
+    : bindingVariableReference PERIOD propertyName
+    ;
+
+removeLabelItem
+    : bindingVariableReference isOrColon labelName
+    ;
+
+// 13.5 <delete statement>
+
+deleteStatement
+    : (DETACH | NODETACH)? DELETE deleteItemList
+    ;
+
+deleteItemList
+    : deleteItem (COMMA deleteItem)*
+    ;
+
+deleteItem
+    : valueExpression
+    ;
+
+// 13.6 <call data-modifying procedure statement>
+
+callDataModifyingProcedureStatement
+    : callProcedureStatement
+    ;
+
+// 14.1 <composite query statement>
+
+compositeQueryStatement
+    : compositeQueryExpression
+    ;
+
+// 14.2 <composite query expression>
+
+compositeQueryExpression
+    : compositeQueryExpression queryConjunction compositeQueryPrimary
+    | compositeQueryPrimary
+    ;
+
+queryConjunction
+    : setOperator
+    | OTHERWISE
+    ;
+
+setOperator
+    : UNION setQuantifier?
+    | EXCEPT setQuantifier?
+    | INTERSECT setQuantifier?
+    ;
+
+compositeQueryPrimary
+    : linearQueryStatement
+    ;
+
+// 14.3 <linear query statement> and <simple query statement>
+
+linearQueryStatement
+    : focusedLinearQueryStatement
+    | ambientLinearQueryStatement
+    ;
+
+focusedLinearQueryStatement
+    : focusedLinearQueryStatementPart* focusedLinearQueryAndPrimitiveResultStatementPart
+    | focusedPrimitiveResultStatement
+    | focusedNestedQuerySpecification
+    | selectStatement
+    ;
+
+focusedLinearQueryStatementPart
+    : useGraphClause simpleLinearQueryStatement
+    ;
+
+focusedLinearQueryAndPrimitiveResultStatementPart
+    : useGraphClause simpleLinearQueryStatement primitiveResultStatement
+    ;
+
+focusedPrimitiveResultStatement
+    : useGraphClause primitiveResultStatement
+    ;
+
+focusedNestedQuerySpecification
+    : useGraphClause nestedQuerySpecification
+    ;
+
+ambientLinearQueryStatement
+    : simpleLinearQueryStatement? primitiveResultStatement
+    | nestedQuerySpecification
+    ;
+
+simpleLinearQueryStatement
+    : simpleQueryStatement+
+    ;
+
+simpleQueryStatement
+    : primitiveQueryStatement
+    | callQueryStatement
+    ;
+
+primitiveQueryStatement
+    : matchStatement
+    | letStatement
+    | forStatement
+    | filterStatement
+    | orderByAndPageStatement
+    ;
+
+// 14.4 <match statement>
+
+matchStatement
+    : simpleMatchStatement
+    | optionalMatchStatement
+    ;
+
+simpleMatchStatement
+    : MATCH graphPatternBindingTable
+    ;
+
+optionalMatchStatement
+    : OPTIONAL optionalOperand
+    ;
+
+optionalOperand
+    : simpleMatchStatement
+    | LEFT_BRACE matchStatementBlock RIGHT_BRACE
+    | LEFT_PAREN matchStatementBlock RIGHT_PAREN
+    ;
+
+matchStatementBlock
+    : matchStatement+
+    ;
+
+// 14.5 <call query statement>
+
+callQueryStatement
+    : callProcedureStatement
+    ;
+
+// 14.6 <filter statement>
+
+filterStatement
+    : FILTER (whereClause | searchCondition)
+    ;
+
+// 14.7 <let statement>
+
+letStatement
+    : LET letVariableDefinitionList
+    ;
+
+letVariableDefinitionList
+    : letVariableDefinition (COMMA letVariableDefinition)*
+    ;
+
+letVariableDefinition
+    : valueVariableDefinition
+    | bindingVariable EQUALS_OPERATOR valueExpression
+    ;
+
+// 14.8 <for statement>
+
+forStatement
+    : FOR forItem forOrdinalityOrOffset?
+    ;
+
+forItem
+    : forItemAlias forItemSource
+    ;
+
+forItemAlias
+    : bindingVariable IN
+    ;
+
+forItemSource
+    : valueExpression
+    ;
+
+forOrdinalityOrOffset
+    : WITH (ORDINALITY | OFFSET) bindingVariable
+    ;
+
+// 14.9 <order by and page statement>
+
+orderByAndPageStatement
+    : orderByClause offsetClause? limitClause?
+    | offsetClause limitClause?
+    | limitClause
+    ;
+
+// 14.10 <primitive result statement>
+
+primitiveResultStatement
+    : returnStatement orderByAndPageStatement?
+    | FINISH
+    ;
+
+// 14.11 <return statement>
+
+returnStatement
+    : RETURN returnStatementBody
+    ;
+
+returnStatementBody
+    : setQuantifier? (ASTERISK | returnItemList) groupByClause?
+    | NO BINDINGS
+    ;
+
+returnItemList
+    : returnItem (COMMA returnItem)*
+    ;
+
+returnItem
+    : aggregatingValueExpression returnItemAlias?
+    ;
+
+returnItemAlias
+    : AS identifier
+    ;
+
+// 14.12 <select statement>
+
+selectStatement
+    : SELECT setQuantifier? (ASTERISK | selectItemList) (selectStatementBody whereClause? groupByClause? havingClause? orderByClause? offsetClause? limitClause?)?
+    ;
+
+selectItemList
+    : selectItem (COMMA selectItem)*
+    ;
+
+selectItem
+    : aggregatingValueExpression selectItemAlias?
+    ;
+
+selectItemAlias
+    : AS identifier
+    ;
+
+havingClause
+    : HAVING searchCondition
+    ;
+
+selectStatementBody
+    : FROM (selectGraphMatchList | selectQuerySpecification)
+    ;
+
+selectGraphMatchList
+    : selectGraphMatch (COMMA selectGraphMatch)*
+    ;
+
+selectGraphMatch
+    : graphExpression matchStatement
+    ;
+
+selectQuerySpecification
+    : nestedQuerySpecification
+    | graphExpression nestedQuerySpecification
+    ;
+
+// 15.1 <call procedure statement> and <procedure call>
+
+callProcedureStatement
+    : OPTIONAL? CALL procedureCall
+    ;
+
+procedureCall
+    : inlineProcedureCall
+    | namedProcedureCall
+    ;
+
+// 15.2 <inline procedure call>
+
+inlineProcedureCall
+    : variableScopeClause? nestedProcedureSpecification
+    ;
+
+variableScopeClause
+    : LEFT_PAREN bindingVariableReferenceList? RIGHT_PAREN
+    ;
+
+bindingVariableReferenceList
+    : bindingVariableReference (COMMA bindingVariableReference)*
+    ;
+
+// 15.3 <named procedure call>
+
+namedProcedureCall
+    : procedureReference LEFT_PAREN procedureArgumentList? RIGHT_PAREN yieldClause?
+    ;
+
+procedureArgumentList
+    : procedureArgument (COMMA procedureArgument)*
+    ;
+
+procedureArgument
+    : valueExpression
+    ;
+
+// 16.1 <at schema clasue>
+
+atSchemaClause
+    : AT schemaReference
+    ;
+
+// 16.2 <use graph clause>
+
+useGraphClause
+    : USE graphExpression
+    ;
+
+// 16.3 <graph pattern binding table>
+
+graphPatternBindingTable
+    : graphPattern graphPatternYieldClause?
+    ;
+
+graphPatternYieldClause
+    : YIELD graphPatternYieldItemList
+    ;
+
+graphPatternYieldItemList
+    : graphPatternYieldItem (COMMA graphPatternYieldItem)*
+    | NO BINDINGS
+    ;
+
+// <elemement variable reference> and <path variable reference> are identical productions, both consisting
+// of a single non-terminal <binding variable reference>. Thus <graph pattern yield item> is ambiguous
+// from a parsing standpoint. So here we simply use bindingVariableReference. Post parsing code must
+// apply the semantics assocaited with each type of <binding variable reference>.
+graphPatternYieldItem
+    : bindingVariableReference
+//    : elementVariableReference
+//    | pathVariableReference
+    ;
+
+// 16.4 <graph pattern>
+
+graphPattern
+    : matchMode? pathPatternList keepClause? graphPatternWhereClause?
+    ;
+
+matchMode
+    : repeatableElementsMatchMode
+    | differentEdgesMatchMode
+    ;
+
+repeatableElementsMatchMode
+    : REPEATABLE elementBindingsOrElements
+    ;
+
+differentEdgesMatchMode
+    : DIFFERENT edgeBindingsOrEdges
+    ;
+
+elementBindingsOrElements
+    : ELEMENT BINDINGS?
+    | ELEMENTS
+    ;
+
+edgeBindingsOrEdges
+    : edgeSynonym BINDINGS?
+    | edgesSynonym
+    ;
+
+pathPatternList
+    : pathPattern (COMMA pathPattern)*
+    ;
+
+pathPattern
+    : pathVariableDeclaration? pathPatternPrefix? pathPatternExpression
+    ;
+
+pathVariableDeclaration
+    : pathVariable EQUALS_OPERATOR
+    ;
+
+keepClause
+    : KEEP pathPatternPrefix
+    ;
+
+graphPatternWhereClause
+    : WHERE searchCondition
+    ;
+
+// 16.5 <insert graph pattern>
+
+insertGraphPattern
+    : insertPathPatternList
+    ;
+
+insertPathPatternList
+    : insertPathPattern (COMMA insertPathPattern)*
+    ;
+
+insertPathPattern
+    : insertNodePattern (insertEdgePattern insertNodePattern)*
+    ;
+
+insertNodePattern
+    : LEFT_PAREN insertElementPatternFiller? RIGHT_PAREN
+    ;
+
+insertEdgePattern
+    : insertEdgePointingLeft
+    | insertEdgePointingRight
+    | insertEdgeUndirected
+    ;
+
+insertEdgePointingLeft
+    : LEFT_ARROW_BRACKET insertElementPatternFiller? RIGHT_BRACKET_MINUS
+    ;
+
+insertEdgePointingRight
+    : MINUS_LEFT_BRACKET insertElementPatternFiller? BRACKET_RIGHT_ARROW
+    ;
+
+insertEdgeUndirected
+    : TILDE_LEFT_BRACKET insertElementPatternFiller? RIGHT_BRACKET_TILDE
+    ;
+
+insertElementPatternFiller
+    : elementVariableDeclaration labelAndPropertySetSpecification?
+    | elementVariableDeclaration? labelAndPropertySetSpecification
+    ;
+
+labelAndPropertySetSpecification
+    : isOrColon labelSetSpecification elementPropertySpecification?
+    | (isOrColon labelSetSpecification)? elementPropertySpecification
+    ;
+
+// 16.6 <path pattern prefix>
+
+pathPatternPrefix
+    : pathModePrefix
+    | pathSearchPrefix
+    ;
+
+pathModePrefix
+    : pathMode pathOrPaths?
+    ;
+
+pathMode
+    : WALK
+    | TRAIL
+    | SIMPLE
+    | ACYCLIC
+    ;
+
+pathSearchPrefix
+    : allPathSearch
+    | anyPathSearch
+    | shortestPathSearch
+    ;
+
+allPathSearch
+    : ALL pathMode? pathOrPaths?
+    ;
+
+pathOrPaths
+    : PATH
+    | PATHS
+    ;
+
+anyPathSearch
+    : ANY numberOfPaths? pathMode? pathOrPaths?
+    ;
+
+numberOfPaths
+    : nonNegativeIntegerSpecification
+    ;
+
+shortestPathSearch
+    : allShortestPathSearch
+    | anyShortestPathSearch
+    | countedShortestPathSearch
+    | countedShortestGroupSearch
+    ;
+
+allShortestPathSearch
+    : ALL SHORTEST pathMode? pathOrPaths?
+    ;
+
+anyShortestPathSearch
+    : ANY SHORTEST pathMode? pathOrPaths?
+    ;
+
+countedShortestPathSearch
+    : SHORTEST numberOfPaths pathMode? pathOrPaths?
+    ;
+
+countedShortestGroupSearch
+    : SHORTEST numberOfGroups? pathMode? pathOrPaths? (GROUP | GROUPS)
+    ;
+
+numberOfGroups
+    : nonNegativeIntegerSpecification
+    ;
+
+// 16.7 <path pattern expression>
+
+pathPatternExpression
+    : pathTerm                                              #ppePathTerm
+    | pathTerm (MULTISET_ALTERNATION_OPERATOR pathTerm)+    #ppeMultisetAlternation
+    | pathTerm (VERTICAL_BAR pathTerm)+                     #ppePatternUnion
+    ;
+
+pathTerm
+    : pathFactor+
+    ;
+
+pathFactor
+    : pathPrimary                           #pfPathPrimary
+    | pathPrimary graphPatternQuantifier    #pfQuantifiedPathPrimary
+    | pathPrimary QUESTION_MARK             #pfQuestionedPathPrimary
+    ;
+
+pathPrimary
+    : elementPattern                        #ppElementPattern
+    | parenthesizedPathPatternExpression    #ppParenthesizedPathPatternExpression
+    | simplifiedPathPatternExpression       #ppSimplifiedPathPatternExpression
+    ;
+
+elementPattern
+    : nodePattern
+    | edgePattern
+    ;
+
+nodePattern
+    : LEFT_PAREN elementPatternFiller RIGHT_PAREN
+    ;
+
+elementPatternFiller
+    : elementVariableDeclaration? isLabelExpression? elementPatternPredicate?
+    ;
+
+elementVariableDeclaration
+    : TEMP? elementVariable
+    ;
+
+isLabelExpression
+    : isOrColon labelExpression
+    ;
+
+isOrColon
+    : IS
+    | COLON
+    ;
+
+elementPatternPredicate
+    : elementPatternWhereClause
+    | elementPropertySpecification
+    ;
+
+elementPatternWhereClause
+    : WHERE searchCondition
+    ;
+
+elementPropertySpecification
+    : LEFT_BRACE propertyKeyValuePairList RIGHT_BRACE
+    ;
+
+propertyKeyValuePairList
+    : propertyKeyValuePair (COMMA propertyKeyValuePair)*
+    ;
+
+propertyKeyValuePair
+    : propertyName COLON valueExpression
+    ;
+
+edgePattern
+    : fullEdgePattern
+    | abbreviatedEdgePattern
+    ;
+
+fullEdgePattern
+    : fullEdgePointingLeft
+    | fullEdgeUndirected
+    | fullEdgePointingRight
+    | fullEdgeLeftOrUndirected
+    | fullEdgeUndirectedOrRight
+    | fullEdgeLeftOrRight
+    | fullEdgeAnyDirection
+    ;
+
+fullEdgePointingLeft
+    : LEFT_ARROW_BRACKET elementPatternFiller RIGHT_BRACKET_MINUS
+    ;
+
+fullEdgeUndirected
+    : TILDE_LEFT_BRACKET elementPatternFiller RIGHT_BRACKET_TILDE
+    ;
+
+fullEdgePointingRight
+    : MINUS_LEFT_BRACKET elementPatternFiller BRACKET_RIGHT_ARROW
+    ;
+
+fullEdgeLeftOrUndirected
+    : LEFT_ARROW_TILDE_BRACKET elementPatternFiller RIGHT_BRACKET_TILDE
+    ;
+
+fullEdgeUndirectedOrRight
+    : TILDE_LEFT_BRACKET elementPatternFiller BRACKET_TILDE_RIGHT_ARROW
+    ;
+
+fullEdgeLeftOrRight
+    : LEFT_ARROW_BRACKET elementPatternFiller BRACKET_RIGHT_ARROW
+    ;
+
+fullEdgeAnyDirection
+    : MINUS_LEFT_BRACKET elementPatternFiller RIGHT_BRACKET_MINUS
+    ;
+
+abbreviatedEdgePattern
+    : LEFT_ARROW
+    | TILDE
+    | RIGHT_ARROW
+    | LEFT_ARROW_TILDE
+    | TILDE_RIGHT_ARROW
+    | LEFT_MINUS_RIGHT
+    | MINUS_SIGN
+    ;
+
+parenthesizedPathPatternExpression
+    : LEFT_PAREN subpathVariableDeclaration? pathModePrefix? pathPatternExpression parenthesizedPathPatternWhereClause? RIGHT_PAREN
+    ;
+
+subpathVariableDeclaration
+    : subpathVariable EQUALS_OPERATOR
+    ;
+
+parenthesizedPathPatternWhereClause
+    : WHERE searchCondition
+    ;
+
+// 16.8 <label expression>
+
+labelExpression
+    : EXCLAMATION_MARK labelExpression                  #labelExpressionNegation
+    | labelExpression AMPERSAND labelExpression         #labelExpressionConjunction
+    | labelExpression VERTICAL_BAR labelExpression      #labelExpressionDisjunction
+    | labelName                                         #labelExpressionName
+    | PERCENT                                           #labelExpressionWildcard
+    | LEFT_PAREN labelExpression RIGHT_PAREN            #labelExpressionParenthesized
+    ;
+
+// 16.9 <path variable reference>
+
+pathVariableReference
+    : bindingVariableReference
+    ;
+
+// 16.10 <element variable reference>
+
+elementVariableReference
+    : bindingVariableReference
+    ;
+
+// 16.11 <graph pattern quantifier>
+
+graphPatternQuantifier
+    : ASTERISK
+    | PLUS_SIGN
+    | fixedQuantifier
+    | generalQuantifier
+    ;
+
+fixedQuantifier
+    : LEFT_BRACE unsignedInteger RIGHT_BRACE
+    ;
+
+generalQuantifier
+    : LEFT_BRACE lowerBound? COMMA upperBound? RIGHT_BRACE
+    ;
+
+lowerBound
+    : unsignedInteger
+    ;
+
+upperBound
+    : unsignedInteger
+    ;
+
+// 16.12 <simplified path pattern expression>
+
+simplifiedPathPatternExpression
+    : simplifiedDefaultingLeft
+    | simplifiedDefaultingUndirected
+    | simplifiedDefaultingRight
+    | simplifiedDefaultingLeftOrUndirected
+    | simplifiedDefaultingUndirectedOrRight
+    | simplifiedDefaultingLeftOrRight
+    | simplifiedDefaultingAnyDirection
+    ;
+
+simplifiedDefaultingLeft
+    : LEFT_MINUS_SLASH simplifiedContents SLASH_MINUS
+    ;
+
+simplifiedDefaultingUndirected
+    : TILDE_SLASH simplifiedContents SLASH_TILDE
+    ;
+
+simplifiedDefaultingRight
+    : MINUS_SLASH simplifiedContents SLASH_MINUS_RIGHT
+    ;
+
+simplifiedDefaultingLeftOrUndirected
+    : LEFT_TILDE_SLASH simplifiedContents SLASH_TILDE
+    ;
+
+simplifiedDefaultingUndirectedOrRight
+    : TILDE_SLASH simplifiedContents SLASH_TILDE_RIGHT
+    ;
+
+simplifiedDefaultingLeftOrRight
+    : LEFT_MINUS_SLASH simplifiedContents SLASH_MINUS_RIGHT
+    ;
+
+simplifiedDefaultingAnyDirection
+    : MINUS_SLASH simplifiedContents SLASH_MINUS
+    ;
+
+simplifiedContents
+    : simplifiedTerm
+    | simplifiedPathUnion
+    | simplifiedMultisetAlternation
+    ;
+
+simplifiedPathUnion
+    : simplifiedTerm VERTICAL_BAR simplifiedTerm (VERTICAL_BAR simplifiedTerm)*
+    ;
+
+simplifiedMultisetAlternation
+    : simplifiedTerm MULTISET_ALTERNATION_OPERATOR simplifiedTerm (MULTISET_ALTERNATION_OPERATOR simplifiedTerm)*
+    ;
+
+simplifiedTerm
+    : simplifiedFactorLow                        #simplifiedFactorLowLabel
+    | simplifiedTerm simplifiedFactorLow      #simplifiedConcatenationLabel
+    ;
+
+simplifiedFactorLow
+    : simplifiedFactorHigh                                     #simplifiedFactorHighLabel
+    | simplifiedFactorLow AMPERSAND simplifiedFactorHigh #simplifiedConjunctionLabel
+    ;
+
+simplifiedFactorHigh
+    : simplifiedTertiary
+    | simplifiedQuantified
+    | simplifiedQuestioned
+    ;
+
+simplifiedQuantified
+    : simplifiedTertiary graphPatternQuantifier
+    ;
+
+simplifiedQuestioned
+    : simplifiedTertiary QUESTION_MARK
+    ;
+
+simplifiedTertiary
+    : simplifiedDirectionOverride
+    | simplifiedSecondary
+    ;
+
+simplifiedDirectionOverride
+    : simplifiedOverrideLeft
+    | simplifiedOverrideUndirected
+    | simplifiedOverrideRight
+    | simplifiedOverrideLeftOrUndirected
+    | simplifiedOverrideUndirectedOrRight
+    | simplifiedOverrideLeftOrRight
+    | simplifiedOverrideAnyDirection
+    ;
+
+simplifiedOverrideLeft
+    : LEFT_ANGLE_BRACKET simplifiedSecondary
+    ;
+
+simplifiedOverrideUndirected
+    : TILDE simplifiedSecondary
+    ;
+
+simplifiedOverrideRight
+    : simplifiedSecondary RIGHT_ANGLE_BRACKET
+    ;
+
+simplifiedOverrideLeftOrUndirected
+    : LEFT_ARROW_TILDE simplifiedSecondary
+    ;
+
+simplifiedOverrideUndirectedOrRight
+    : TILDE simplifiedSecondary RIGHT_ANGLE_BRACKET
+    ;
+
+simplifiedOverrideLeftOrRight
+    : LEFT_ANGLE_BRACKET simplifiedSecondary RIGHT_ANGLE_BRACKET
+    ;
+
+simplifiedOverrideAnyDirection
+    : MINUS_SIGN simplifiedSecondary
+    ;
+
+simplifiedSecondary
+    : simplifiedPrimary
+    | simplifiedNegation
+    ;
+
+simplifiedNegation
+    : EXCLAMATION_MARK simplifiedPrimary
+    ;
+
+simplifiedPrimary
+    : labelName
+    | LEFT_PAREN simplifiedContents RIGHT_PAREN
+    ;
+
+// 16.13 <where clause>
+
+whereClause
+    : WHERE searchCondition
+    ;
+
+// 16.14 <yield clause>
+
+yieldClause
+    : YIELD yieldItemList
+    ;
+
+yieldItemList
+    : yieldItem (COMMA yieldItem)*
+    ;
+
+yieldItem
+    : (yieldItemName yieldItemAlias?)
+    ;
+
+yieldItemName
+    : fieldName
+    ;
+
+yieldItemAlias
+    : AS bindingVariable
+    ;
+
+// 16.15 <group by clasue>
+
+groupByClause
+    : GROUP BY groupingElementList
+    ;
+
+groupingElementList
+    : groupingElement (COMMA groupingElement)*
+    | emptyGroupingSet
+    ;
+
+groupingElement
+    : bindingVariableReference
+    ;
+
+emptyGroupingSet
+    : LEFT_PAREN RIGHT_PAREN
+    ;
+
+// 16.16 <order by clasue>
+
+orderByClause
+    : ORDER BY sortSpecificationList
+    ;
+
+// 16.17 <sort specification list>
+
+sortSpecificationList
+    : sortSpecification (COMMA sortSpecification)*
+    ;
+
+sortSpecification
+    : sortKey orderingSpecification? nullOrdering?
+    ;
+
+sortKey
+    : aggregatingValueExpression
+    ;
+
+orderingSpecification
+    : ASC
+    | ASCENDING
+    | DESC
+    | DESCENDING
+    ;
+
+nullOrdering
+    : NULLS FIRST
+    | NULLS LAST
+    ;
+
+// 16.18 <limit clause>
+
+limitClause
+    : LIMIT nonNegativeIntegerSpecification
+    ;
+
+// 16.19 <offset clause>
+
+offsetClause
+    : offsetSynonym nonNegativeIntegerSpecification
+    ;
+
+offsetSynonym
+    : OFFSET
+    | SKIP_RESERVED_WORD
+    ;
+
+// 17.1 <schema reference> and <catalog schema parent name>
+
+schemaReference
+    : absoluteCatalogSchemaReference
+    | relativeCatalogSchemaReference
+    | referenceParameterSpecification
+    ;
+
+absoluteCatalogSchemaReference
+    : SOLIDUS
+    | absoluteDirectoryPath schemaName
+    ;
+
+catalogSchemaParentAndName
+    : absoluteDirectoryPath schemaName
+    ;
+
+relativeCatalogSchemaReference
+    : predefinedSchemaReference
+    | relativeDirectoryPath schemaName
+    ;
+
+predefinedSchemaReference
+    : HOME_SCHEMA
+    | CURRENT_SCHEMA
+    | PERIOD
+    ;
+
+absoluteDirectoryPath
+    : SOLIDUS simpleDirectoryPath?
+    ;
+
+relativeDirectoryPath
+    : DOUBLE_PERIOD (SOLIDUS DOUBLE_PERIOD)* SOLIDUS simpleDirectoryPath?
+    ;
+
+simpleDirectoryPath
+    : (directoryName SOLIDUS)+
+    ;
+
+// 17.2 <graph reference> and <catalog graph parent and name>
+
+graphReference
+    : catalogObjectParentReference graphName
+    | delimitedGraphName
+    | homeGraph
+    | referenceParameterSpecification
+    ;
+
+catalogGraphParentAndName
+    : catalogObjectParentReference? graphName
+    ;
+
+homeGraph
+    : HOME_PROPERTY_GRAPH
+    | HOME_GRAPH
+    ;
+
+// 17.3 <graph type reference> and <catalog graph type parent and name>
+
+graphTypeReference
+    : catalogGraphTypeParentAndName
+    | referenceParameterSpecification
+    ;
+
+catalogGraphTypeParentAndName
+    : catalogObjectParentReference? graphTypeName
+    ;
+
+// 17.4 <binding table reference> and <catalog binding table parent name>
+
+bindingTableReference
+    : catalogObjectParentReference bindingTableName
+    | delimitedBindingTableName
+    | referenceParameterSpecification
+    ;
+
+// 17.5 <procedure reference> and <catalog procedure parent and name>
+
+procedureReference
+    : catalogProcedureParentAndName
+    | referenceParameterSpecification
+    ;
+
+catalogProcedureParentAndName
+    : catalogObjectParentReference? procedureName
+    ;
+
+// 17.6 <catalog object parent reference>
+
+catalogObjectParentReference
+    : schemaReference SOLIDUS? (objectName PERIOD)*
+    |  (objectName PERIOD)+
+    ;
+
+// 17.7 <reference parameter specification>
+
+referenceParameterSpecification
+    : SUBSTITUTED_PARAMETER_REFERENCE
+    ;
+
+// 18.1 <nested graph type specification>
+
+nestedGraphTypeSpecification
+    : LEFT_BRACE graphTypeSpecificationBody RIGHT_BRACE
+    ;
+
+graphTypeSpecificationBody
+    : elementTypeList
+    ;
+
+elementTypeList
+    : elementTypeSpecification (COMMA elementTypeSpecification)*
+    ;
+
+elementTypeSpecification
+    : nodeTypeSpecification
+    | edgeTypeSpecification
+    ;
+
+// 18.2 <node type specification>
+
+nodeTypeSpecification
+    : nodeTypePattern
+    | nodeTypePhrase
+    ;
+
+nodeTypePattern
+    : (nodeSynonym TYPE? nodeTypeName)? LEFT_PAREN localNodeTypeAlias? nodeTypeFiller? RIGHT_PAREN
+    ;
+
+nodeTypePhrase
+    : nodeSynonym TYPE? nodeTypePhraseFiller (AS localNodeTypeAlias)?
+    ;
+
+nodeTypePhraseFiller
+    : nodeTypeName nodeTypeFiller?
+    | nodeTypeFiller
+    ;
+
+nodeTypeFiller
+    : nodeTypeKeyLabelSet nodeTypeImpliedContent?
+    | nodeTypeImpliedContent
+    ;
+
+localNodeTypeAlias
+    : regularIdentifier
+    ;
+
+nodeTypeImpliedContent
+    : nodeTypeLabelSet
+    | nodeTypePropertyTypes
+    | nodeTypeLabelSet nodeTypePropertyTypes
+    ;
+
+nodeTypeKeyLabelSet
+    : labelSetPhrase? IMPLIES
+    ;
+
+nodeTypeLabelSet
+    : labelSetPhrase
+    ;
+
+nodeTypePropertyTypes
+    : propertyTypesSpecification
+    ;
+
+// 18.3 <edge type specification>
+
+edgeTypeSpecification
+    : edgeTypePattern
+    | edgeTypePhrase
+    ;
+
+edgeTypePattern
+    : (edgeKind? edgeSynonym TYPE? edgeTypeName)? (edgeTypePatternDirected | edgeTypePatternUndirected)
+    ;
+
+edgeTypePhrase
+    : edgeKind edgeSynonym TYPE? edgeTypePhraseFiller endpointPairPhrase
+    ;
+
+edgeTypePhraseFiller
+    : edgeTypeName edgeTypeFiller?
+    | edgeTypeFiller
+    ;
+
+edgeTypeFiller
+    : edgeTypeKeyLabelSet edgeTypeImpliedContent?
+    | edgeTypeImpliedContent
+    ;
+
+edgeTypeImpliedContent
+    : edgeTypeLabelSet
+    | edgeTypePropertyTypes
+    | edgeTypeLabelSet edgeTypePropertyTypes
+    ;
+
+edgeTypeKeyLabelSet
+    : labelSetPhrase? IMPLIES
+    ;
+
+edgeTypeLabelSet
+    : labelSetPhrase
+    ;
+
+edgeTypePropertyTypes
+    : propertyTypesSpecification
+    ;
+
+edgeTypePatternDirected
+    : edgeTypePatternPointingRight
+    | edgeTypePatternPointingLeft
+    ;
+
+edgeTypePatternPointingRight
+    : sourceNodeTypeReference arcTypePointingRight destinationNodeTypeReference
+    ;
+
+edgeTypePatternPointingLeft
+    : destinationNodeTypeReference arcTypePointingLeft sourceNodeTypeReference
+    ;
+
+edgeTypePatternUndirected
+    : sourceNodeTypeReference arcTypeUndirected destinationNodeTypeReference
+    ;
+
+arcTypePointingRight
+    : MINUS_LEFT_BRACKET edgeTypeFiller BRACKET_RIGHT_ARROW
+    ;
+
+arcTypePointingLeft
+    : LEFT_ARROW_BRACKET edgeTypeFiller RIGHT_BRACKET_MINUS
+    ;
+
+arcTypeUndirected
+    : TILDE_LEFT_BRACKET edgeTypeFiller RIGHT_BRACKET_TILDE
+    ;
+
+sourceNodeTypeReference
+    : LEFT_PAREN sourceNodeTypeAlias RIGHT_PAREN
+    | LEFT_PAREN nodeTypeFiller? RIGHT_PAREN
+    ;
+
+destinationNodeTypeReference
+    : LEFT_PAREN destinationNodeTypeAlias RIGHT_PAREN
+    | LEFT_PAREN nodeTypeFiller? RIGHT_PAREN
+    ;
+
+edgeKind
+    : DIRECTED
+    | UNDIRECTED
+    ;
+
+endpointPairPhrase
+    : CONNECTING endpointPair
+    ;
+
+endpointPair
+    : endpointPairDirected
+    | endpointPairUndirected
+    ;
+
+endpointPairDirected
+    : endpointPairPointingRight
+    | endpointPairPointingLeft
+    ;
+
+endpointPairPointingRight
+    : LEFT_PAREN sourceNodeTypeAlias connectorPointingRight destinationNodeTypeAlias RIGHT_PAREN
+    ;
+
+endpointPairPointingLeft
+    : LEFT_PAREN destinationNodeTypeAlias LEFT_ARROW sourceNodeTypeAlias RIGHT_PAREN
+    ;
+
+endpointPairUndirected
+    : LEFT_PAREN sourceNodeTypeAlias connectorUndirected destinationNodeTypeAlias RIGHT_PAREN
+    ;
+
+connectorPointingRight
+    : TO
+    | RIGHT_ARROW
+    ;
+
+connectorUndirected
+    : TO
+    | TILDE
+    ;
+
+sourceNodeTypeAlias
+    : regularIdentifier
+    ;
+
+destinationNodeTypeAlias
+    : regularIdentifier
+    ;
+
+// 18.4 <label set phrase> and <label set specification>
+
+labelSetPhrase
+    : LABEL labelName
+    | LABELS labelSetSpecification
+    | isOrColon labelSetSpecification
+    ;
+
+labelSetSpecification
+    : labelName (AMPERSAND labelName)*
+    ;
+
+// 18.5 <property types specification>
+
+propertyTypesSpecification
+    : LEFT_BRACE propertyTypeList? RIGHT_BRACE
+    ;
+
+propertyTypeList
+    : propertyType (COMMA propertyType)*
+    ;
+
+// 18.6 <property type>
+
+propertyType
+    : propertyName typed? propertyValueType
+    ;
+
+// 18.7 <property value type>
+
+propertyValueType
+    : valueType
+    ;
+
+// 18.8 <binding table type>
+
+bindingTableType
+    : BINDING? TABLE fieldTypesSpecification
+    ;
+
+// 18.9 <value type>
+
+valueType
+    : predefinedType                                                                                                                              #predefinedTypeLabel
+    // <constructed value type>
+    | pathValueType                                                                                                                               #pathValueTypeLabel
+    | listValueTypeName LEFT_ANGLE_BRACKET valueType RIGHT_ANGLE_BRACKET (LEFT_BRACKET maxLength RIGHT_BRACKET)? notNull?     #listValueTypeAlt1
+    | valueType listValueTypeName (LEFT_BRACKET maxLength RIGHT_BRACKET)? notNull?                                                    #listValueTypeAlt2
+    | listValueTypeName (LEFT_BRACKET maxLength RIGHT_BRACKET)? notNull?                                                                #listValueTypeAlt3
+    | recordType                                                                                                                                   #recordTypeLabel
+    // <dynamic union type>
+    | ANY VALUE? notNull?                                                                                                                        #openDynamicUnionTypeLabel
+    | ANY? PROPERTY VALUE notNull?                                                                                                             #dynamicPropertyValueTypeLabel
+    // <closed dynamic union type>
+    | ANY VALUE? LEFT_ANGLE_BRACKET valueType (VERTICAL_BAR valueType)* RIGHT_ANGLE_BRACKET                                         #closedDynamicUnionTypeAtl1
+    | valueType VERTICAL_BAR valueType                                                                                                        #closedDynamicUnionTypeAtl2
+    ;
+
+typed
+    : DOUBLE_COLON
+    | TYPED
+    ;
+
+predefinedType
+    : booleanType
+    | characterStringType
+    | byteStringType
+    | numericType
+    | temporalType
+    | referenceValueType
+    | immaterialValueType
+    ;
+
+booleanType
+    : (BOOL | BOOLEAN) notNull?
+    ;
+
+characterStringType
+    : STRING (LEFT_PAREN (minLength COMMA)? maxLength RIGHT_PAREN)? notNull?
+    | CHAR (LEFT_PAREN fixedLength RIGHT_PAREN)? notNull?
+    | VARCHAR (LEFT_PAREN maxLength RIGHT_PAREN)? notNull?
+    ;
+
+byteStringType
+    : BYTES (LEFT_PAREN (minLength COMMA)? maxLength RIGHT_PAREN)? notNull?
+    | BINARY (LEFT_PAREN fixedLength RIGHT_PAREN)? notNull?
+    | VARBINARY (LEFT_PAREN maxLength RIGHT_PAREN)? notNull?
+    ;
+
+minLength
+    : unsignedInteger
+    ;
+
+maxLength
+    : unsignedInteger
+    ;
+
+fixedLength
+    : unsignedInteger
+    ;
+
+numericType
+    : exactNumericType
+    | approximateNumericType
+    ;
+
+exactNumericType
+    : binaryExactNumericType
+    | decimalExactNumericType
+    ;
+
+binaryExactNumericType
+    : signedBinaryExactNumericType
+    | unsignedBinaryExactNumericType
+    ;
+
+signedBinaryExactNumericType
+    : INT8 notNull?
+    | INT16 notNull?
+    | INT32 notNull?
+    | INT64 notNull?
+    | INT128 notNull?
+    | INT256 notNull?
+    | SMALLINT notNull?
+    | INT (LEFT_PAREN precision RIGHT_PAREN)? notNull?
+    | BIGINT notNull?
+    | SIGNED? verboseBinaryExactNumericType
+    ;
+
+unsignedBinaryExactNumericType
+    : UINT8 notNull?
+    | UINT16 notNull?
+    | UINT32 notNull?
+    | UINT64 notNull?
+    | UINT128 notNull?
+    | UINT256 notNull?
+    | USMALLINT notNull?
+    | UINT (LEFT_PAREN precision RIGHT_PAREN)? notNull?
+    | UBIGINT notNull?
+    | UNSIGNED verboseBinaryExactNumericType
+    ;
+
+verboseBinaryExactNumericType
+    : INTEGER8 notNull?
+    | INTEGER16 notNull?
+    | INTEGER32 notNull?
+    | INTEGER64 notNull?
+    | INTEGER128 notNull?
+    | INTEGER256 notNull?
+    | SMALL INTEGER notNull?
+    | INTEGER (LEFT_PAREN precision RIGHT_PAREN)? notNull?
+    | BIG INTEGER notNull?
+    ;
+
+decimalExactNumericType
+    : (DECIMAL | DEC) (LEFT_PAREN precision (COMMA scale)? RIGHT_PAREN notNull?)?
+    ;
+
+precision
+    : unsignedDecimalInteger
+    ;
+
+scale
+    : unsignedDecimalInteger
+    ;
+
+approximateNumericType
+    : FLOAT16 notNull?
+    | FLOAT32 notNull?
+    | FLOAT64 notNull?
+    | FLOAT128 notNull?
+    | FLOAT256 notNull?
+    | FLOAT (LEFT_PAREN precision (COMMA scale)? RIGHT_PAREN)? notNull?
+    | REAL notNull?
+    | DOUBLE PRECISION? notNull?
+    ;
+
+temporalType
+    : temporalInstantType
+    | temporalDurationType
+    ;
+
+temporalInstantType
+    : datetimeType
+    | localdatetimeType
+    | dateType
+    | timeType
+    | localtimeType
+    ;
+
+datetimeType
+    : ZONED DATETIME notNull?
+    | TIMESTAMP WITH TIME ZONE notNull?
+    ;
+
+localdatetimeType
+    : LOCAL DATETIME notNull?
+    | TIMESTAMP (WITHOUT TIME ZONE)? notNull?
+    ;
+
+dateType
+    : DATE notNull?
+    ;
+
+timeType
+    : ZONED TIME notNull?
+    | TIME WITH TIME ZONE notNull?
+    ;
+
+localtimeType
+    : LOCAL TIME notNull?
+    | TIME WITHOUT TIME ZONE notNull?
+    ;
+
+temporalDurationType
+    : DURATION LEFT_PAREN temporalDurationQualifier RIGHT_PAREN notNull?
+    ;
+
+temporalDurationQualifier
+    : YEAR TO MONTH
+    | DAY TO SECOND
+    ;
+
+referenceValueType
+    : graphReferenceValueType
+    | bindingTableReferenceValueType
+    | nodeReferenceValueType
+    | edgeReferenceValueType
+    ;
+
+immaterialValueType
+    : nullType
+    | emptyType
+    ;
+
+nullType
+    : NULL
+    ;
+
+emptyType
+    : NULL notNull
+    | NOTHING
+    ;
+
+graphReferenceValueType
+    : openGraphReferenceValueType
+    | closedGraphReferenceValueType
+    ;
+
+closedGraphReferenceValueType
+    : PROPERTY? GRAPH nestedGraphTypeSpecification notNull?
+    ;
+
+openGraphReferenceValueType
+    : ANY PROPERTY? GRAPH notNull?
+    ;
+
+bindingTableReferenceValueType
+    : bindingTableType notNull?
+    ;
+
+nodeReferenceValueType
+    : openNodeReferenceValueType
+    | closedNodeReferenceValueType
+    ;
+
+closedNodeReferenceValueType
+    : nodeTypeSpecification notNull?
+    ;
+
+openNodeReferenceValueType
+    : ANY? nodeSynonym notNull?
+    ;
+
+edgeReferenceValueType
+    : openEdgeReferenceValueType
+    | closedEdgeReferenceValueType
+    ;
+
+closedEdgeReferenceValueType
+    : edgeTypeSpecification notNull?
+    ;
+
+openEdgeReferenceValueType
+    : ANY? edgeSynonym notNull?
+    ;
+
+pathValueType
+    : PATH notNull?
+    ;
+
+listValueTypeName
+    : GROUP? listValueTypeNameSynonym
+    ;
+
+listValueTypeNameSynonym
+    : LIST
+    | ARRAY
+    ;
+
+recordType
+    : ANY? RECORD notNull?
+    | RECORD? fieldTypesSpecification notNull?
+    ;
+
+fieldTypesSpecification
+    : LEFT_BRACE fieldTypeList? RIGHT_BRACE
+    ;
+
+fieldTypeList
+    : fieldType (COMMA fieldType)*
+    ;
+
+notNull
+    :  NOT NULL
+    ;
+
+// 18.10 <field type>
+
+fieldType
+    : fieldName typed? valueType
+    ;
+
+// 19.1 <search condition>
+
+searchCondition
+    : booleanValueExpression
+    ;
+
+// 19.2 <predicate>
+
+predicate
+    : existsPredicate
+    | nullPredicate
+    | valueTypePredicate
+    | directedPredicate
+    | labeledPredicate
+    | sourceDestinationPredicate
+    | all_differentPredicate
+    | samePredicate
+    | property_existsPredicate
+    ;
+
+// 19.3 <comparison predicate>
+
+// The <comparison predicate> productions moved to valueExpression
+// to avoid left mutually recursive productions.
+
+comparisonPredicatePart2
+    : compOp valueExpression
+    ;
+
+compOp
+    : EQUALS_OPERATOR
+    | NOT_EQUALS_OPERATOR
+    | LEFT_ANGLE_BRACKET
+    | RIGHT_ANGLE_BRACKET
+    | LESS_THAN_OR_EQUALS_OPERATOR
+    | GREATER_THAN_OR_EQUALS_OPERATOR
+    ;
+
+// 19.4 <exists predicate>
+
+existsPredicate
+    : EXISTS (LEFT_BRACE graphPattern RIGHT_BRACE | LEFT_PAREN graphPattern RIGHT_PAREN | LEFT_BRACE matchStatementBlock RIGHT_BRACE | LEFT_PAREN matchStatementBlock RIGHT_PAREN | nestedQuerySpecification)
+    ;
+
+// 19.5 <null predicate>
+
+nullPredicate
+    : valueExpressionPrimary nullPredicatePart2
+    ;
+
+nullPredicatePart2
+    : IS NOT? NULL
+    ;
+
+// 19.6 <value type predicate>
+
+valueTypePredicate
+    : valueExpressionPrimary valueTypePredicatePart2
+    ;
+
+valueTypePredicatePart2
+    : IS NOT? typed valueType
+    ;
+
+// 19.7 <normalized predicate>
+
+normalizedPredicatePart2
+    : IS NOT? normalForm? NORMALIZED
+    ;
+
+// 19.8 <directed predicate>
+
+directedPredicate
+    : elementVariableReference directedPredicatePart2
+    ;
+
+directedPredicatePart2
+    : IS NOT? DIRECTED
+    ;
+
+// 19.9 <labled predicate>
+
+labeledPredicate
+    : elementVariableReference labeledPredicatePart2
+    ;
+
+labeledPredicatePart2
+    : isLabeledOrColon labelExpression
+    ;
+
+isLabeledOrColon
+    : IS NOT? LABELED
+    | COLON
+    ;
+
+// 19.10 <source/destination predicate>
+
+sourceDestinationPredicate
+    : nodeReference sourcePredicatePart2
+    | nodeReference destinationPredicatePart2
+    ;
+
+nodeReference
+    : elementVariableReference
+    ;
+
+sourcePredicatePart2
+    : IS NOT? SOURCE OF edgeReference
+    ;
+
+destinationPredicatePart2
+    : IS NOT? DESTINATION OF edgeReference
+    ;
+
+edgeReference
+    : elementVariableReference
+    ;
+
+// 19.11 <all different predicate>
+
+all_differentPredicate
+    : ALL_DIFFERENT LEFT_PAREN elementVariableReference COMMA elementVariableReference (COMMA elementVariableReference)* RIGHT_PAREN
+    ;
+
+// 19.12 <same predicate>
+
+samePredicate
+    : SAME LEFT_PAREN elementVariableReference COMMA elementVariableReference (COMMA elementVariableReference)* RIGHT_PAREN
+    ;
+
+// 19.13 <property exists predicate>
+
+property_existsPredicate
+    : PROPERTY_EXISTS LEFT_PAREN elementVariableReference COMMA propertyName RIGHT_PAREN
+    ;
+
+// 20.1 <value expression>
+
+// This version of valueExpression sucks up rules broken out in the standard to a single production. This
+// eliminates ambiguity in multiple rules specifying valueExpressionPrimary.
+
+valueExpression
+    // Numeric, datetime and duration types all support roughly the same expressions. So here
+    // we define a rule that deals with all of them. It is up to the implementation to post
+    // process the sytnax tree and flag invalid type and function combinations.
+    : sign = (PLUS_SIGN | MINUS_SIGN) valueExpression                       #signedExprAlt
+    | valueExpression operator = (ASTERISK | SOLIDUS) valueExpression       #multDivExprAlt
+    | valueExpression operator = (PLUS_SIGN | MINUS_SIGN) valueExpression   #addSubtractExprAlt
+    // Character strings, byte strings, lists and paths all support the same concatenation
+    // operator. So here we define a rule that deals with all of them. Of course the types
+    // cannot be combined. So it is up to implementation to post process the sytax tree
+    // and flag invalid type and function combinations.
+    | valueExpression CONCATENATION_OPERATOR valueExpression                #concatenationExprAlt
+    // Boolean value expression included here.
+    | NOT valueExpression                                                   #notExprAlt
+    | valueExpression IS NOT? truthValue                                    #isNotExprAlt
+    | valueExpression AND valueExpression                                   #conjunctiveExprAlt
+    | valueExpression operator = (OR | XOR) valueExpression                 #disjunctiveExprAlt
+    // The comparisonPredicate productions moved here to eliminate left mutual recursion.
+    | valueExpression comparisonPredicatePart2                              #comparisonExprAlt
+    | predicate                                                             #predicateExprAlt
+    // The normalizedPredicate productions moved here to eliminate left mutual recursion.
+    | valueExpression normalizedPredicatePart2                              #normalizedPredicateExprAlt
+    | PROPERTY? GRAPH graphExpression                                       #propertyGraphExprAlt
+    | BINDING? TABLE bindingTableExpression                                 #bindingTableExprAlt
+    | valueFunction                                                         #valueFunctionExprAlt
+    | valueExpressionPrimary                                                #primaryExprAlt
+    ;
+
+valueFunction
+    : numericValueFunction
+    | datetimeSubtraction
+    | datetimeValueFunction
+    | durationValueFunction
+    | characterOrByteStringFunction
+    | listValueFunction
+    ;
+
+booleanValueExpression
+    : valueExpression
+    ;
+
+characterOrByteStringFunction
+    : subCharacterOrByteString
+    | trimSingleCharacterOrByteString
+    | foldCharacterString
+    | trimMultiCharacterCharacterString
+    | normalizeCharacterString
+    ;
+
+subCharacterOrByteString
+    : (LEFT | RIGHT) LEFT_PAREN valueExpression COMMA stringLength RIGHT_PAREN
+    ;
+
+trimSingleCharacterOrByteString
+    : TRIM LEFT_PAREN trimOperands RIGHT_PAREN
+    ;
+
+foldCharacterString
+    : (UPPER | LOWER) LEFT_PAREN valueExpression RIGHT_PAREN
+    ;
+
+trimMultiCharacterCharacterString
+    : (BTRIM | LTRIM | RTRIM) LEFT_PAREN valueExpression (COMMA valueExpression)? RIGHT_PAREN
+    ;
+
+normalizeCharacterString
+    : NORMALIZE LEFT_PAREN valueExpression (COMMA normalForm)? RIGHT_PAREN
+    ;
+
+nodeReferenceValueExpression
+    : valueExpressionPrimary
+    ;
+
+edgeReferenceValueExpression
+    : valueExpressionPrimary
+    ;
+
+aggregatingValueExpression
+    : valueExpression
+    ;
+
+// 20.2 <value expression primary>
+
+valueExpressionPrimary
+    : parenthesizedValueExpression
+    | aggregateFunction
+    | unsignedValueSpecification
+// List and Record literals are reduntantly/abiguously part of the literal production
+//    | listValueConstructor
+//    | recordConstructor
+    | pathValueConstructor
+    | valueExpressionPrimary PERIOD propertyName      // <propertyReference
+    | valueQueryExpression
+    | caseExpression
+    | castSpecification
+    | element_idFunction
+    | letValueExpression
+    | bindingVariableReference
+    ;
+
+parenthesizedValueExpression
+    : LEFT_PAREN valueExpression RIGHT_PAREN
+    ;
+
+nonParenthesizedValueExpressionPrimary
+    : nonParenthesizedValueExpressionPrimarySpecialCase
+    | bindingVariableReference
+    ;
+
+nonParenthesizedValueExpressionPrimarySpecialCase
+    : aggregateFunction
+    | unsignedValueSpecification
+// List and Record literals are reduntantly/abiguously part of the literal production
+//    | listValueConstructor
+//    | recordConstructor
+    | pathValueConstructor
+    | valueExpressionPrimary PERIOD propertyName      // <property reference>
+    | valueQueryExpression
+    | caseExpression
+    | castSpecification
+    | element_idFunction
+    | letValueExpression
+    ;
+
+// 20.3 <value specification>
+
+unsignedValueSpecification
+    : unsignedLiteral
+    | generalValueSpecification
+    ;
+
+nonNegativeIntegerSpecification
+    : unsignedInteger
+    | dynamicParameterSpecification
+    ;
+
+generalValueSpecification
+    : dynamicParameterSpecification
+    | SESSION_USER
+    ;
+
+// 20.4 <dynamic parameter specification>
+
+dynamicParameterSpecification
+    : GENERAL_PARAMETER_REFERENCE
+    ;
+
+// 20.5 <let value expression>
+
+letValueExpression
+    : LET letVariableDefinitionList IN valueExpression END
+    ;
+
+// 20.6 <value query expression>
+
+valueQueryExpression
+    : VALUE nestedQuerySpecification
+    ;
+
+// 20.7 <case expression>
+
+caseExpression
+    : caseAbbreviation
+    | caseSpecification
+    ;
+
+caseAbbreviation
+    : NULLIF LEFT_PAREN valueExpression COMMA valueExpression RIGHT_PAREN
+    | COALESCE LEFT_PAREN valueExpression (COMMA valueExpression)+ RIGHT_PAREN
+    ;
+
+caseSpecification
+    : simpleCase
+    | searchedCase
+    ;
+
+simpleCase
+    : CASE caseOperand simpleWhenClause+ elseClause? END
+    ;
+
+searchedCase
+    : CASE searchedWhenClause+ elseClause? END
+    ;
+
+simpleWhenClause
+    : WHEN whenOperandList THEN result
+    ;
+
+searchedWhenClause
+    : WHEN searchCondition THEN result
+    ;
+
+elseClause
+    : ELSE result
+    ;
+
+caseOperand
+    : nonParenthesizedValueExpressionPrimary
+    | elementVariableReference
+    ;
+
+whenOperandList
+    : whenOperand (COMMA whenOperand)*
+    ;
+
+whenOperand
+    : nonParenthesizedValueExpressionPrimary
+    | comparisonPredicatePart2
+    | nullPredicatePart2
+    | valueTypePredicatePart2
+    | normalizedPredicatePart2
+    | directedPredicatePart2
+    | labeledPredicatePart2
+    | sourcePredicatePart2
+    | destinationPredicatePart2
+    ;
+
+result
+    : resultExpression
+    | nullLiteral
+    ;
+
+resultExpression
+    : valueExpression
+    ;
+
+// 20.8 <cast specification>
+
+castSpecification
+    : CAST LEFT_PAREN castOperand AS castTarget RIGHT_PAREN
+    ;
+
+castOperand
+    : valueExpression
+    | nullLiteral
+    ;
+
+castTarget
+    : valueType
+    ;
+
+// 20.9 <aggregate function>
+
+aggregateFunction
+    : COUNT LEFT_PAREN ASTERISK RIGHT_PAREN
+    | generalSetFunction
+    | binarySetFunction
+    ;
+
+generalSetFunction
+    : generalSetFunctionType LEFT_PAREN setQuantifier? valueExpression RIGHT_PAREN
+    ;
+
+binarySetFunction
+    : binarySetFunctionType LEFT_PAREN dependentValueExpression COMMA independentValueExpression RIGHT_PAREN
+    ;
+
+generalSetFunctionType
+    : AVG
+    | COUNT
+    | MAX
+    | MIN
+    | SUM
+    | COLLECT_LIST
+    | STDDEV_SAMP
+    | STDDEV_POP
+    ;
+
+setQuantifier
+    : DISTINCT
+    | ALL
+    ;
+
+binarySetFunctionType
+    : PERCENTILE_CONT
+    | PERCENTILE_DISC
+    ;
+
+dependentValueExpression
+    : setQuantifier? numericValueExpression
+    ;
+
+independentValueExpression
+    : numericValueExpression
+    ;
+
+// 20.10 <element_id function>
+
+element_idFunction
+    : ELEMENT_ID LEFT_PAREN elementVariableReference RIGHT_PAREN
+    ;
+
+// 20.11 <property reference>
+
+// 20.12 <binding variable reference>
+
+bindingVariableReference
+    : bindingVariable
+    ;
+
+// The path value expression was combined with list and string value expressions.
+// See listStringOrPathValueExpression.
+
+pathValueExpression
+    : valueExpression
+    ;
+
+// 20.14 <path value constructor>
+
+pathValueConstructor
+    : pathValueConstructorByEnumeration
+    ;
+
+pathValueConstructorByEnumeration
+    : PATH LEFT_BRACKET pathElementList RIGHT_BRACKET
+    ;
+
+pathElementList
+    : pathElementListStart pathElementListStep*
+    ;
+
+pathElementListStart
+    : nodeReferenceValueExpression
+    ;
+
+pathElementListStep
+    : COMMA edgeReferenceValueExpression COMMA nodeReferenceValueExpression
+    ;
+
+// 20.15 <list value expression>
+
+// The list value expression was combined with path and string value expressions.
+// See listStringOrPathValueExpression.
+
+listValueExpression
+    : valueExpression
+    ;
+
+// 20.16 <list value function>
+
+// Note: ByteString functions were moved to characterByteStringOrListFunction, some alternatives
+// apply to characterString, byteString and list. Breaking them out separately resulted in
+// ambiguity.
+
+listValueFunction
+    : trimListFunction
+    | elementsFunction
+    ;
+
+trimListFunction
+    : TRIM LEFT_PAREN listValueExpression COMMA numericValueExpression RIGHT_PAREN
+    ;
+
+elementsFunction
+    : ELEMENTS LEFT_PAREN pathValueExpression RIGHT_PAREN
+    ;
+
+// 20.17 <list value constructor>
+
+listValueConstructor
+    : listValueConstructorByEnumeration
+    ;
+
+listValueConstructorByEnumeration
+    : listValueTypeName? LEFT_BRACKET listElementList? RIGHT_BRACKET
+    ;
+
+listElementList
+    : listElement (COMMA listElement)*
+    ;
+
+listElement
+    : valueExpression
+    ;
+
+// 20.18 <record constructor>
+
+recordConstructor
+    : RECORD? fieldsSpecification
+    ;
+
+fieldsSpecification
+    : LEFT_BRACE fieldList? RIGHT_BRACE
+    ;
+
+fieldList
+    : field (COMMA field)*
+    ;
+
+// 20.19 <field>
+
+field
+    : fieldName COLON valueExpression
+    ;
+
+// 20.20 <boolean value expression>
+
+// Most of <boolean value expression> is incorporated in valueExpression
+
+truthValue
+    : BOOLEAN_LITERAL
+    ;
+
+// 20.21 <numeric value expression>
+
+numericValueExpression
+    : sign = (PLUS_SIGN | MINUS_SIGN) numericValueExpression
+    | numericValueExpression operator = (ASTERISK | SOLIDUS) numericValueExpression
+    | numericValueExpression operator = (PLUS_SIGN | MINUS_SIGN) numericValueExpression
+    | valueExpressionPrimary
+    | numericValueFunction
+    ;
+
+// 20.22 <numeric value function>
+
+numericValueFunction
+    : lengthExpression
+    | cardinalityExpression
+    | absoluteValueExpression
+    | modulusExpression
+    | trigonometricFunction
+    | generalLogarithmFunction
+    | commonLogarithm
+    | naturalLogarithm
+    | exponentialFunction
+    | powerFunction
+    | squareRoot
+    | floorFunction
+    | ceilingFunction
+    ;
+
+lengthExpression
+    : charLengthExpression
+    | byteLengthExpression
+    | pathLengthExpression
+    ;
+
+cardinalityExpression
+    : CARDINALITY LEFT_PAREN cardinalityExpressionArgument RIGHT_PAREN
+    | SIZE LEFT_PAREN listValueExpression RIGHT_PAREN
+    ;
+
+cardinalityExpressionArgument
+    : valueExpression
+    ;
+
+charLengthExpression
+    : (CHAR_LENGTH | CHARACTER_LENGTH) LEFT_PAREN characterStringValueExpression RIGHT_PAREN
+    ;
+
+byteLengthExpression
+    : (BYTE_LENGTH | OCTET_LENGTH) LEFT_PAREN byteStringValueExpression RIGHT_PAREN
+    ;
+
+pathLengthExpression
+    : PATH_LENGTH LEFT_PAREN pathValueExpression RIGHT_PAREN
+    ;
+
+// absoluteValueExpression applies to both numeric types and duration types. They have the same syntax.
+absoluteValueExpression
+    : ABS LEFT_PAREN valueExpression RIGHT_PAREN
+    ;
+
+modulusExpression
+    : MOD LEFT_PAREN numericValueExpressionDividend COMMA numericValueExpressionDivisor RIGHT_PAREN
+    ;
+
+numericValueExpressionDividend
+    : numericValueExpression
+    ;
+
+numericValueExpressionDivisor
+    : numericValueExpression
+    ;
+
+trigonometricFunction
+    : trigonometricFunctionName LEFT_PAREN numericValueExpression RIGHT_PAREN
+    ;
+
+trigonometricFunctionName
+    : SIN
+    | COS
+    | TAN
+    | COT
+    | SINH
+    | COSH
+    | TANH
+    | ASIN
+    | ACOS
+    | ATAN
+    | DEGREES
+    | RADIANS
+    ;
+
+generalLogarithmFunction
+    : LOG LEFT_PAREN generalLogarithmBase COMMA generalLogarithmArgument RIGHT_PAREN
+    ;
+
+generalLogarithmBase
+    : numericValueExpression
+    ;
+
+generalLogarithmArgument
+    : numericValueExpression
+    ;
+
+commonLogarithm
+    : LOG10 LEFT_PAREN numericValueExpression RIGHT_PAREN
+    ;
+
+naturalLogarithm
+    : LN LEFT_PAREN numericValueExpression RIGHT_PAREN
+    ;
+
+exponentialFunction
+    : EXP LEFT_PAREN numericValueExpression RIGHT_PAREN
+    ;
+
+powerFunction
+    : POWER LEFT_PAREN numericValueExpressionBase COMMA numericValueExpressionExponent RIGHT_PAREN
+    ;
+
+numericValueExpressionBase
+    : numericValueExpression
+    ;
+
+numericValueExpressionExponent
+    : numericValueExpression
+    ;
+
+squareRoot
+    : SQRT LEFT_PAREN numericValueExpression RIGHT_PAREN
+    ;
+
+floorFunction
+    : FLOOR LEFT_PAREN numericValueExpression RIGHT_PAREN
+    ;
+
+ceilingFunction
+    : (CEIL | CEILING) LEFT_PAREN numericValueExpression RIGHT_PAREN
+    ;
+
+// 20.23 <string value expression>
+
+// The string value expressions were combined with list and path value expressions.
+
+characterStringValueExpression
+    : valueExpression
+    ;
+
+byteStringValueExpression
+    : valueExpression
+    ;
+
+// 20.24 <string value function>
+
+// Note: String functions were moved to characterByteStringOrListFunction, some alternatives
+// apply to characterString, byteString and list. Breaking them out separately resulted in
+// ambiguity.
+
+trimOperands
+    : (trimSpecification? trimCharacterOrByteString? FROM)? trimCharacterOrByteStringSource
+    ;
+
+trimCharacterOrByteStringSource
+    : valueExpression
+    ;
+
+trimSpecification
+    : LEADING
+    | TRAILING
+    | BOTH
+    ;
+
+trimCharacterOrByteString
+    : valueExpression
+    ;
+
+normalForm
+    : NFC
+    | NFD
+    | NFKC
+    | NFKD
+    ;
+
+stringLength
+    : numericValueExpression
+    ;
+
+// 20.25 <byte string function>
+
+// Note: ByteString functions were moved to characterByteStringOrListFunction, some alternatives
+// apply to characterString, byteString and list. Breaking them out separately resulted in
+// ambiguity.
+
+// 20.26 <datetime value expression>
+
+// The implementation should enforce that the data type is a datetime value.
+datetimeValueExpression
+     : valueExpression
+     ;
+
+// 20.27 <datetime value function>
+
+datetimeValueFunction
+    : dateFunction
+    | timeFunction
+    | datetimeFunction
+    | localtimeFunction
+    | localdatetimeFunction
+    ;
+
+dateFunction
+    : CURRENT_DATE
+    | DATE LEFT_PAREN dateFunctionParameters? RIGHT_PAREN
+    ;
+
+timeFunction
+    : CURRENT_TIME
+    | ZONED_TIME LEFT_PAREN timeFunctionParameters? RIGHT_PAREN
+    ;
+
+localtimeFunction
+    : LOCAL_TIME (LEFT_PAREN timeFunctionParameters? RIGHT_PAREN)?
+    ;
+
+datetimeFunction
+    : CURRENT_TIMESTAMP
+    | ZONED_DATETIME LEFT_PAREN datetimeFunctionParameters? RIGHT_PAREN
+    ;
+
+localdatetimeFunction
+    : LOCAL_TIMESTAMP
+    | LOCAL_DATETIME LEFT_PAREN datetimeFunctionParameters? RIGHT_PAREN
+    ;
+
+dateFunctionParameters
+    : dateString
+    | recordConstructor
+    ;
+
+timeFunctionParameters
+    : timeString
+    | recordConstructor
+    ;
+
+datetimeFunctionParameters
+    : datetimeString
+    | recordConstructor
+    ;
+
+// 20.28 <duration value expression>
+
+// The implemenation should enforce that the data type is a duration value.
+durationValueExpression
+    : valueExpression
+    ;
+
+datetimeSubtraction
+    : DURATION_BETWEEN LEFT_PAREN datetimeSubtractionParameters RIGHT_PAREN temporalDurationQualifier?
+    ;
+
+datetimeSubtractionParameters
+    : datetimeValueExpression1 COMMA datetimeValueExpression2
+    ;
+
+datetimeValueExpression1
+    : datetimeValueExpression
+    ;
+
+datetimeValueExpression2
+    : datetimeValueExpression
+    ;
+
+// 20.29 <duration value function>
+
+durationValueFunction
+    : durationFunction
+    | absoluteValueExpression
+    ;
+
+durationFunction
+    : DURATION LEFT_PAREN durationFunctionParameters RIGHT_PAREN
+    ;
+
+durationFunctionParameters
+    : durationString
+    | recordConstructor
+    ;
+
+// 21.1 Names and Variables
+
+objectName
+    : identifier
+    ;
+
+objectNameOrBindingVariable
+    : regularIdentifier
+    ;
+
+directoryName
+    : identifier
+    ;
+
+schemaName
+    : identifier
+    ;
+
+graphName
+    : regularIdentifier
+    | delimitedGraphName
+    ;
+
+delimitedGraphName
+    // DELIMITED_IDENTIFIER
+    : DOUBLE_QUOTED_CHARACTER_SEQUENCE
+    | ACCENT_QUOTED_CHARACTER_SEQUENCE
+    ;
+
+graphTypeName
+    : identifier
+    ;
+
+nodeTypeName
+    : identifier
+    ;
+
+edgeTypeName
+    : identifier
+    ;
+
+bindingTableName
+    : regularIdentifier
+    | delimitedBindingTableName
+    ;
+
+delimitedBindingTableName
+     // DELIMITED_IDENTIFIER
+     : DOUBLE_QUOTED_CHARACTER_SEQUENCE
+     | ACCENT_QUOTED_CHARACTER_SEQUENCE
+     ;
+
+procedureName
+    : identifier
+    ;
+
+labelName
+    : identifier
+    ;
+
+propertyName
+    : identifier
+    ;
+
+fieldName
+    : identifier
+    ;
+
+elementVariable
+    : bindingVariable
+    ;
+
+pathVariable
+    : bindingVariable
+    ;
+
+subpathVariable
+    : regularIdentifier
+    ;
+
+bindingVariable
+    : regularIdentifier
+    ;
+
+// 21.2 <literal>
+
+unsignedLiteral
+    : unsignedNumericLiteral
+    | generalLiteral
+    ;
+
+generalLiteral
+    : BOOLEAN_LITERAL
+    | characterStringLiteral
+    | BYTE_STRING_LITERAL
+    | temporalLiteral
+    | durationLiteral
+    | nullLiteral
+    | listLiteral
+    | recordLiteral
+    ;
+
+temporalLiteral
+    : dateLiteral
+    | timeLiteral
+    | datetimeLiteral
+//    | sqlDatetimeLiteral
+    ;
+
+dateLiteral
+    : DATE dateString
+    ;
+
+timeLiteral
+    : TIME timeString
+    ;
+
+datetimeLiteral
+    : (DATETIME | TIMESTAMP) datetimeString
+    ;
+
+listLiteral
+    : listValueConstructorByEnumeration
+    ;
+
+recordLiteral
+    : recordConstructor
+    ;
+
+identifier
+    : regularIdentifier
+    // DELIMITED_IDENTIFIER
+    | DOUBLE_QUOTED_CHARACTER_SEQUENCE
+    | ACCENT_QUOTED_CHARACTER_SEQUENCE
+    ;
+
+regularIdentifier
+    : REGULAR_IDENTIFIER
+    | nonReservedWords
+    ;
+
+timeZoneString
+    : characterStringLiteral
+    ;
+
+characterStringLiteral
+    : SINGLE_QUOTED_CHARACTER_SEQUENCE
+    | DOUBLE_QUOTED_CHARACTER_SEQUENCE
+    ;
+
+unsignedNumericLiteral
+    : exactNumericLiteral
+    | approximateNumericLiteral
+    ;
+
+exactNumericLiteral
+    : UNSIGNED_DECIMAL_IN_SCIENTIFIC_NOTATION_WITH_EXACT_NUMBER_SUFFIX
+    | UNSIGNED_DECIMAL_IN_COMMON_NOTATION_WITH_EXACT_NUMBER_SUFFIX
+    | UNSIGNED_DECIMAL_IN_COMMON_NOTATION_WITHOUT_SUFFIX
+    | UNSIGNED_DECIMAL_INTEGER_WITH_EXACT_NUMBER_SUFFIX
+    | unsignedInteger
+    ;
+
+approximateNumericLiteral
+    : UNSIGNED_DECIMAL_IN_SCIENTIFIC_NOTATION_WITH_APPROXIMATE_NUMBER_SUFFIX
+    | UNSIGNED_DECIMAL_IN_SCIENTIFIC_NOTATION_WITHOUT_SUFFIX
+    | UNSIGNED_DECIMAL_IN_COMMON_NOTATION_WITH_APPROXIMATE_NUMBER_SUFFIX
+    | UNSIGNED_DECIMAL_INTEGER_WITH_APPROXIMATE_NUMBER_SUFFIX
+    ;
+
+unsignedInteger
+    : UNSIGNED_DECIMAL_INTEGER
+    | UNSIGNED_HEXADECIMAL_INTEGER
+    | UNSIGNED_OCTAL_INTEGER
+    | UNSIGNED_BINARY_INTEGER
+    ;
+
+unsignedDecimalInteger
+    : UNSIGNED_DECIMAL_INTEGER
+    ;
+
+nullLiteral
+    : NULL
+    ;
+
+dateString
+    : characterStringLiteral
+    ;
+
+timeString
+    : characterStringLiteral
+    ;
+
+datetimeString
+    : characterStringLiteral
+    ;
+
+durationLiteral
+    : DURATION durationString
+//    | sqlIntervalLiteral
+    ;
+
+durationString
+    : characterStringLiteral
+    ;
+
+nodeSynonym
+    : NODE
+    | VERTEX
+    ;
+
+edgesSynonym
+    : EDGES
+    | RELATIONSHIPS
+    ;
+
+edgeSynonym
+    : EDGE
+    | RELATIONSHIP
+    ;
+
+// 21.1 Names and Variables
+
+IMPLIES
+    : RIGHT_DOUBLE_ARROW
+    | 'IMPLIES'
+    ;
+
+fragment PARAMETER_NAME
+    : SEPARATED_IDENTIFIER
+    ;
+
+// 21.2 <literal>
+
+nonReservedWords
+    : ACYCLIC
+    | BINDING
+    | BINDINGS
+    | CONNECTING
+    | DESTINATION
+    | DIFFERENT
+    | DIRECTED
+    | EDGE
+    | EDGES
+    | ELEMENT
+    | ELEMENTS
+    | FIRST
+    | GRAPH
+    | GROUPS
+    | KEEP
+    | LABEL
+    | LABELED
+    | LABELS
+    | LAST
+    | NFC
+    | NFD
+    | NFKC
+    | NFKD
+    | NO
+    | NODE
+    | NORMALIZED
+    | ONLY
+    | ORDINALITY
+    | PROPERTY
+    | READ
+    | RELATIONSHIP
+    | RELATIONSHIPS
+    | REPEATABLE
+    | SHORTEST
+    | SIMPLE
+    | SOURCE
+    | TABLE
+    | TEMP
+    | TO
+    | TRAIL
+    | TRANSACTION
+    | TYPE
+    | UNDIRECTED
+    | VERTEX
+    | WALK
+    | WITHOUT
+    | WRITE
+    | ZONE
+    ;
+
+BOOLEAN_LITERAL
+    : 'TRUE'
+    | 'FALSE'
+    | 'UNKNOWN'
+    ;
+
+SINGLE_QUOTED_CHARACTER_SEQUENCE
+    : NO_ESCAPE? UNBROKEN_SINGLE_QUOTED_CHARACTER_SEQUENCE
+    ;
+
+DOUBLE_QUOTED_CHARACTER_SEQUENCE
+    : NO_ESCAPE? UNBROKEN_DOUBLE_QUOTED_CHARACTER_SEQUENCE
+    ;
+
+ACCENT_QUOTED_CHARACTER_SEQUENCE
+    :NO_ESCAPE? UNBROKEN_ACCENT_QUOTED_CHARACTER_SEQUENCE
+    ;
+
+NO_ESCAPE
+    : COMMERCIAL_AT
+    ;
+
+fragment UNBROKEN_SINGLE_QUOTED_CHARACTER_SEQUENCE
+    : QUOTE SINGLE_QUOTED_CHARACTER_REPRESENTATION* QUOTE
+    ;
+
+fragment UNBROKEN_DOUBLE_QUOTED_CHARACTER_SEQUENCE
+    : DOUBLE_QUOTE DOUBLE_QUOTED_CHARACTER_REPRESENTATION* DOUBLE_QUOTE
+    ;
+
+fragment UNBROKEN_ACCENT_QUOTED_CHARACTER_SEQUENCE
+    : GRAVE_ACCENT ACCENT_QUOTED_CHARACTER_REPRESENTATION* GRAVE_ACCENT
+    ;
+
+fragment SINGLE_QUOTED_CHARACTER_REPRESENTATION:
+       (ESCAPED_CHARACTER | ~['\\\r\n])+
+       ;
+
+fragment DOUBLE_QUOTED_CHARACTER_REPRESENTATION:
+       (ESCAPED_CHARACTER | ~["\\\r\n])+
+       ;
+
+fragment ACCENT_QUOTED_CHARACTER_REPRESENTATION:
+       (ESCAPED_CHARACTER | ~[`\\\r\n])+
+       ;
+
+fragment ESCAPED_CHARACTER
+    : ESCAPED_REVERSE_SOLIDUS
+       | ESCAPED_QUOTE
+       | ESCAPED_DOUBLE_QUOTE
+       | ESCAPED_GRAVE_ACCENT
+       | ESCAPED_TAB
+       | ESCAPED_BACKSPACE
+       | ESCAPED_NEW_LINE
+       | ESCAPED_CARRIAGE_RETURN
+       | ESCAPED_FORM_FEED
+       | ESCAPED_UNICODE4_DIGIT_VALUE
+       | ESCAPED_UNICODE6_DIGIT_VALUE
+       ;
+
+fragment ESCAPED_REVERSE_SOLIDUS: REVERSE_SOLIDUS REVERSE_SOLIDUS;
+fragment ESCAPED_QUOTE: REVERSE_SOLIDUS QUOTE;
+fragment ESCAPED_DOUBLE_QUOTE: REVERSE_SOLIDUS DOUBLE_QUOTE;
+fragment ESCAPED_GRAVE_ACCENT: REVERSE_SOLIDUS GRAVE_ACCENT;
+fragment ESCAPED_TAB: REVERSE_SOLIDUS 't';
+fragment ESCAPED_BACKSPACE: REVERSE_SOLIDUS 'b';
+fragment ESCAPED_NEW_LINE: REVERSE_SOLIDUS 'n';
+fragment ESCAPED_CARRIAGE_RETURN: REVERSE_SOLIDUS 'r';
+fragment ESCAPED_FORM_FEED: REVERSE_SOLIDUS 'f';
+fragment ESCAPED_UNICODE4_DIGIT_VALUE:
+       REVERSE_SOLIDUS 'u' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT;
+fragment ESCAPED_UNICODE6_DIGIT_VALUE:
+       REVERSE_SOLIDUS 'u' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT;
+
+// Todo: Finish this. It is tricky how it interacts with <separator>
+BYTE_STRING_LITERAL
+    : 'X' QUOTE SPACE* (HEX_DIGIT SPACE* HEX_DIGIT SPACE*)* QUOTE
+    ;
+
+UNSIGNED_DECIMAL_IN_SCIENTIFIC_NOTATION_WITH_EXACT_NUMBER_SUFFIX
+    : UNSIGNED_DECIMAL_IN_SCIENTIFIC_NOTATION EXACT_NUMBER_SUFFIX
+    ;
+
+UNSIGNED_DECIMAL_IN_SCIENTIFIC_NOTATION_WITHOUT_SUFFIX
+    : UNSIGNED_DECIMAL_IN_SCIENTIFIC_NOTATION
+    ;
+
+UNSIGNED_DECIMAL_IN_SCIENTIFIC_NOTATION_WITH_APPROXIMATE_NUMBER_SUFFIX
+    : UNSIGNED_DECIMAL_IN_SCIENTIFIC_NOTATION APPROXIMATE_NUMBER_SUFFIX
+    ;
+
+UNSIGNED_DECIMAL_IN_COMMON_NOTATION_WITH_EXACT_NUMBER_SUFFIX
+    : UNSIGNED_DECIMAL_IN_COMMON_NOTATION EXACT_NUMBER_SUFFIX
+    ;
+
+UNSIGNED_DECIMAL_IN_COMMON_NOTATION_WITHOUT_SUFFIX
+    : UNSIGNED_DECIMAL_IN_COMMON_NOTATION
+    ;
+
+UNSIGNED_DECIMAL_IN_COMMON_NOTATION_WITH_APPROXIMATE_NUMBER_SUFFIX
+    : UNSIGNED_DECIMAL_IN_COMMON_NOTATION APPROXIMATE_NUMBER_SUFFIX
+    ;
+
+UNSIGNED_DECIMAL_INTEGER_WITH_EXACT_NUMBER_SUFFIX
+    : UNSIGNED_DECIMAL_INTEGER EXACT_NUMBER_SUFFIX
+    ;
+
+UNSIGNED_DECIMAL_INTEGER_WITH_APPROXIMATE_NUMBER_SUFFIX
+    : UNSIGNED_DECIMAL_INTEGER APPROXIMATE_NUMBER_SUFFIX
+    ;
+
+UNSIGNED_DECIMAL_INTEGER
+    : DIGIT (UNDERSCORE? DIGIT)*
+    ;
+
+fragment EXACT_NUMBER_SUFFIX
+    : 'M'
+    ;
+
+fragment UNSIGNED_DECIMAL_IN_SCIENTIFIC_NOTATION
+    : MANTISSA 'E' EXPONENT
+    ;
+
+fragment MANTISSA
+    : UNSIGNED_DECIMAL_IN_COMMON_NOTATION
+    | UNSIGNED_DECIMAL_INTEGER
+    ;
+
+fragment EXPONENT
+    : SIGNED_DECIMAL_INTEGER
+    ;
+
+fragment UNSIGNED_DECIMAL_IN_COMMON_NOTATION
+    : UNSIGNED_DECIMAL_INTEGER (PERIOD UNSIGNED_DECIMAL_INTEGER?)
+    | PERIOD UNSIGNED_DECIMAL_INTEGER
+    ;
+
+fragment SIGNED_DECIMAL_INTEGER
+    : (PLUS_SIGN | MINUS_SIGN)? UNSIGNED_DECIMAL_INTEGER
+    ;
+
+UNSIGNED_HEXADECIMAL_INTEGER
+    : '0x' ('_'? HEX_DIGIT)+
+    ;
+
+UNSIGNED_OCTAL_INTEGER
+    : '0o' ('_'? OCTAL_DIGIT)+
+    ;
+
+UNSIGNED_BINARY_INTEGER
+    : '0b' ('_'? BINARY_DIGIT)+
+    ;
+
+fragment APPROXIMATE_NUMBER_SUFFIX
+    : 'F'
+    | 'D'
+    ;
+
+// 21.3 <token>, <separator>, and <identifier>
+
+// Reserved words
+ABS: 'ABS';
+ACOS: 'ACOS';
+ALL: 'ALL';
+ALL_DIFFERENT: 'ALL_DIFFERENT';
+AND: 'AND';
+ANY: 'ANY';
+ARRAY: 'ARRAY';
+AS: 'AS';
+ASC: 'ASC';
+ASCENDING: 'ASCENDING';
+ASIN: 'ASIN';
+AT: 'AT';
+ATAN: 'ATAN';
+AVG: 'AVG';
+BIG: 'BIG';
+BIGINT: 'BIGINT';
+BINARY: 'BINARY';
+BOOL: 'BOOL';
+BOOLEAN: 'BOOLEAN';
+BOTH: 'BOTH';
+BTRIM: 'BTRIM';
+BY: 'BY';
+BYTE_LENGTH: 'BYTE_LENGTH';
+BYTES: 'BYTES';
+CALL: 'CALL';
+CARDINALITY: 'CARDINALITY';
+CASE: 'CASE';
+CAST: 'CAST';
+CEIL: 'CEIL';
+CEILING: 'CEILING';
+CHAR: 'CHAR';
+CHAR_LENGTH: 'CHAR_LENGTH';
+CHARACTER_LENGTH: 'CHARACTER_LENGTH';
+CHARACTERISTICS: 'CHARACTERISTICS';
+CLOSE: 'CLOSE';
+COALESCE: 'COALESCE';
+COLLECT_LIST: 'COLLECT_LIST';
+COMMIT: 'COMMIT';
+COPY: 'COPY';
+COS: 'COS';
+COSH: 'COSH';
+COT: 'COT';
+COUNT: 'COUNT';
+CREATE: 'CREATE';
+CURRENT_DATE: 'CURRENT_DATE';
+CURRENT_GRAPH: 'CURRENT_GRAPH';
+CURRENT_PROPERTY_GRAPH: 'CURRENT_PROPERTY_GRAPH';
+CURRENT_SCHEMA: 'CURRENT_SCHEMA';
+CURRENT_TIME: 'CURRENT_TIME';
+CURRENT_TIMESTAMP: 'CURRENT_TIMESTAMP';
+DATE: 'DATE';
+DATETIME: 'DATETIME';
+DAY: 'DAY';
+DEC: 'DEC';
+DECIMAL: 'DECIMAL';
+DEGREES: 'DEGREES';
+DELETE: 'DELETE';
+DESC: 'DESC';
+DESCENDING: 'DESCENDING';
+DETACH: 'DETACH';
+DISTINCT: 'DISTINCT';
+DOUBLE: 'DOUBLE';
+DROP: 'DROP';
+DURATION: 'DURATION';
+DURATION_BETWEEN: 'DURATION_BETWEEN';
+ELEMENT_ID: 'ELEMENT_ID';
+ELSE: 'ELSE';
+END: 'END';
+EXCEPT: 'EXCEPT';
+EXISTS: 'EXISTS';
+EXP: 'EXP';
+FILTER: 'FILTER';
+FINISH: 'FINISH';
+FLOAT: 'FLOAT';
+FLOAT16: 'FLOAT16';
+FLOAT32: 'FLOAT32';
+FLOAT64: 'FLOAT64';
+FLOAT128: 'FLOAT128';
+FLOAT256: 'FLOAT256';
+FLOOR: 'FLOOR';
+FOR: 'FOR';
+FROM: 'FROM';
+GROUP: 'GROUP';
+HAVING: 'HAVING';
+HOME_GRAPH: 'HOME_GRAPH';
+HOME_PROPERTY_GRAPH: 'HOME_PROPERTY_GRAPH';
+HOME_SCHEMA: 'HOME_SCHEMA';
+HOUR: 'HOUR';
+IF: 'IF';
+IN: 'IN';
+INSERT: 'INSERT';
+INT: 'INT';
+INTEGER: 'INTEGER';
+INT8: 'INT8';
+INTEGER8: 'INTEGER8';
+INT16: 'INT16';
+INTEGER16: 'INTEGER16';
+INT32: 'INT32';
+INTEGER32: 'INTEGER32';
+INT64: 'INT64';
+INTEGER64: 'INTEGER64';
+INT128: 'INT128';
+INTEGER128: 'INTEGER128';
+INT256: 'INT256';
+INTEGER256: 'INTEGER256';
+INTERSECT: 'INTERSECT';
+INTERVAL: 'INTERVAL';
+IS: 'IS';
+LEADING: 'LEADING';
+LEFT: 'LEFT';
+LET: 'LET';
+LIKE: 'LIKE';
+LIMIT: 'LIMIT';
+LIST: 'LIST';
+LN: 'LN';
+LOCAL: 'LOCAL';
+LOCAL_DATETIME: 'LOCAL_DATETIME';
+LOCAL_TIME: 'LOCAL_TIME';
+LOCAL_TIMESTAMP: 'LOCAL_TIMESTAMP';
+LOG: 'LOG';
+LOG10: 'LOG10';
+LOWER: 'LOWER';
+LTRIM: 'LTRIM';
+MATCH: 'MATCH';
+MAX: 'MAX';
+MIN: 'MIN';
+MINUTE: 'MINUTE';
+MOD: 'MOD';
+MONTH: 'MONTH';
+NEXT: 'NEXT';
+NODETACH: 'NODETACH';
+NORMALIZE: 'NORMALIZE';
+NOT: 'NOT';
+NOTHING: 'NOTHING';
+NULL: 'NULL';
+NULLS: 'NULLS';
+NULLIF: 'NULLIF';
+OCTET_LENGTH: 'OCTET_LENGTH';
+OF: 'OF';
+OFFSET: 'OFFSET';
+OPTIONAL: 'OPTIONAL';
+OR: 'OR';
+ORDER: 'ORDER';
+OTHERWISE: 'OTHERWISE';
+PARAMETER: 'PARAMETER';
+PARAMETERS: 'PARAMETERS';
+PATH: 'PATH';
+PATH_LENGTH: 'PATH_LENGTH';
+PATHS: 'PATHS';
+PERCENTILE_CONT: 'PERCENTILE_CONT';
+PERCENTILE_DISC: 'PERCENTILE_DISC';
+POWER: 'POWER';
+PRECISION: 'PRECISION';
+PROPERTY_EXISTS: 'PROPERTY_EXISTS';
+RADIANS: 'RADIANS';
+REAL: 'REAL';
+RECORD: 'RECORD';
+REMOVE: 'REMOVE';
+REPLACE: 'REPLACE';
+RESET: 'RESET';
+RETURN: 'RETURN';
+RIGHT: 'RIGHT';
+ROLLBACK: 'ROLLBACK';
+RTRIM: 'RTRIM';
+SAME: 'SAME';
+SCHEMA: 'SCHEMA';
+SECOND: 'SECOND';
+SELECT: 'SELECT';
+SESSION: 'SESSION';
+SESSION_USER: 'SESSION_USER';
+SET: 'SET';
+SIGNED: 'SIGNED';
+SIN: 'SIN';
+SINH: 'SINH';
+SIZE: 'SIZE';
+SKIP_RESERVED_WORD: 'SKIP';
+SMALL: 'SMALL';
+SMALLINT: 'SMALLINT';
+SQRT: 'SQRT';
+START: 'START';
+STDDEV_POP: 'STDDEV_POP';
+STDDEV_SAMP: 'STDDEV_SAMP';
+STRING: 'STRING';
+SUM: 'SUM';
+TAN: 'TAN';
+TANH: 'TANH';
+THEN: 'THEN';
+TIME: 'TIME';
+TIMESTAMP: 'TIMESTAMP';
+TRAILING: 'TRAILING';
+TRIM: 'TRIM';
+TYPED: 'TYPED';
+UBIGINT: 'UBIGINT';
+UINT: 'UINT';
+UINT8: 'UINT8';
+UINT16: 'UINT16';
+UINT32: 'UINT32';
+UINT64: 'UINT64';
+UINT128: 'UINT128';
+UINT256: 'UINT256';
+UNION: 'UNION';
+UNSIGNED: 'UNSIGNED';
+UPPER: 'UPPER';
+USE: 'USE';
+USMALLINT: 'USMALLINT';
+VALUE: 'VALUE';
+VARBINARY: 'VARBINARY';
+VARCHAR: 'VARCHAR';
+VARIABLE: 'VARIABLE';
+WHEN: 'WHEN';
+WHERE: 'WHERE';
+WITH: 'WITH';
+XOR: 'XOR';
+YEAR: 'YEAR';
+YIELD: 'YIELD';
+ZONED: 'ZONED';
+ZONED_DATETIME: 'ZONED_DATETIME';
+ZONED_TIME: 'ZONED_TIME';
+
+// Prereserved words
+ABSTRACT: 'ABSTRACT';
+AGGREGATE: 'AGGREGATE';
+AGGREGATES: 'AGGREGATES';
+ALTER: 'ALTER';
+CATALOG: 'CATALOG';
+CLEAR: 'CLEAR';
+CLONE: 'CLONE';
+CONSTRAINT: 'CONSTRAINT';
+CURRENT_ROLE: 'CURRENT_ROLE';
+CURRENT_USER: 'CURRENT_USER';
+DATA: 'DATA';
+DIRECTORY: 'DIRECTORY';
+DRYRUN: 'DRYRUN';
+EXACT: 'EXACT';
+EXISTING: 'EXISTING';
+FUNCTION: 'FUNCTION';
+GQLSTATUS: 'GQLSTATUS';
+GRANT: 'GRANT';
+INSTANT: 'INSTANT';
+INFINITY: 'INFINITY';
+NUMBER: 'NUMBER';
+NUMERIC: 'NUMERIC';
+ON: 'ON';
+OPEN: 'OPEN';
+PARTITION: 'PARTITION';
+PROCEDURE: 'PROCEDURE';
+PRODUCT: 'PRODUCT';
+PROJECT: 'PROJECT';
+QUERY: 'QUERY';
+RECORDS: 'RECORDS';
+REFERENCE: 'REFERENCE';
+RENAME: 'RENAME';
+REVOKE: 'REVOKE';
+SUBSTRING: 'SUBSTRING';
+SYSTEM_USER: 'SYSTEM_USER';
+TEMPORAL: 'TEMPORAL';
+UNIQUE: 'UNIQUE';
+UNIT: 'UNIT';
+VALUES: 'VALUES';
+
+// Nonreserved words
+ACYCLIC: 'ACYCLIC';
+BINDING: 'BINDING';
+BINDINGS: 'BINDINGS';
+CONNECTING: 'CONNECTING';
+DESTINATION: 'DESTINATION';
+DIFFERENT: 'DIFFERENT';
+DIRECTED: 'DIRECTED';
+EDGE: 'EDGE';
+EDGES: 'EDGES';
+ELEMENT: 'ELEMENT';
+ELEMENTS: 'ELEMENTS';
+FIRST: 'FIRST';
+GRAPH: 'GRAPH';
+GROUPS: 'GROUPS';
+KEEP: 'KEEP';
+LABEL: 'LABEL';
+LABELED: 'LABELED';
+LABELS: 'LABELS';
+LAST: 'LAST';
+NFC: 'NFC';
+NFD: 'NFD';
+NFKC: 'NFKC';
+NFKD: 'NFKD';
+NO: 'NO';
+NODE: 'NODE';
+NORMALIZED: 'NORMALIZED';
+ONLY: 'ONLY';
+ORDINALITY: 'ORDINALITY';
+PROPERTY: 'PROPERTY';
+READ: 'READ';
+RELATIONSHIP: 'RELATIONSHIP';
+RELATIONSHIPS: 'RELATIONSHIPS';
+REPEATABLE: 'REPEATABLE';
+SHORTEST: 'SHORTEST';
+SIMPLE: 'SIMPLE';
+SOURCE: 'SOURCE';
+TABLE: 'TABLE';
+TEMP: 'TEMP';
+TO: 'TO';
+TRAIL: 'TRAIL';
+TRANSACTION: 'TRANSACTION';
+TYPE: 'TYPE';
+UNDIRECTED: 'UNDIRECTED';
+VERTEX: 'VERTEX';
+WALK: 'WALK';
+WITHOUT: 'WITHOUT';
+WRITE: 'WRITE';
+ZONE: 'ZONE';
+
+fragment SEPARATED_IDENTIFIER
+    : DELIMITED_IDENTIFIER
+    | EXTENDED_IDENTIFIER
+    ;
+
+REGULAR_IDENTIFIER
+    : IDENTIFIER_START IDENTIFIER_EXTEND*
+    ;
+
+fragment EXTENDED_IDENTIFIER
+    : IDENTIFIER_EXTEND+
+    ;
+
+fragment DELIMITED_IDENTIFIER
+    : DOUBLE_QUOTED_CHARACTER_SEQUENCE
+    | ACCENT_QUOTED_CHARACTER_SEQUENCE
+    ;
+
+SUBSTITUTED_PARAMETER_REFERENCE
+    : DOUBLE_DOLLAR_SIGN PARAMETER_NAME
+    ;
+
+GENERAL_PARAMETER_REFERENCE
+    : DOLLAR_SIGN PARAMETER_NAME
+    ;
+
+fragment IDENTIFIER_START
+    : ID_Start
+    | Pc
+    ;
+
+fragment IDENTIFIER_EXTEND
+    : ID_Continue
+    ;
+
+fragment ID_Start
+    : [\p{ID_Start}]
+    ;
+
+fragment ID_Continue
+    : [\p{ID_Continue}]
+    ;
+
+MULTISET_ALTERNATION_OPERATOR: '|+|';
+
+BRACKET_RIGHT_ARROW: ']->';
+BRACKET_TILDE_RIGHT_ARROW: ']~>';
+CONCATENATION_OPERATOR: '||';
+DOUBLE_COLON: '::';
+DOUBLE_DOLLAR_SIGN: '$$';
+DOUBLE_PERIOD: '..';
+GREATER_THAN_OR_EQUALS_OPERATOR: '>=';
+LEFT_ARROW: '<-';
+LEFT_ARROW_TILDE: '<~';
+LEFT_ARROW_BRACKET: '<-[';
+LEFT_ARROW_TILDE_BRACKET: '<~[';
+LEFT_MINUS_RIGHT: '<->';
+LEFT_MINUS_SLASH: '<-/';
+LEFT_TILDE_SLASH: '<~/';
+LESS_THAN_OR_EQUALS_OPERATOR: '<=';
+MINUS_LEFT_BRACKET: '-[';
+MINUS_SLASH: '-/';
+NOT_EQUALS_OPERATOR: '<>';
+RIGHT_ARROW: '->';
+RIGHT_BRACKET_MINUS: ']-';
+RIGHT_BRACKET_TILDE: ']~';
+RIGHT_DOUBLE_ARROW: '=>';
+SLASH_MINUS: '/-';
+SLASH_MINUS_RIGHT: '/->';
+SLASH_TILDE: '/~';
+SLASH_TILDE_RIGHT: '/~>';
+TILDE_LEFT_BRACKET: '~[';
+TILDE_RIGHT_ARROW: '~>';
+TILDE_SLASH: '~/';
+
+// 21.4 GQL terminal characters
+
+AMPERSAND: '&';
+ASTERISK: '*';
+COLON: ':';
+COMMA: ',';
+COMMERCIAL_AT: '@';
+DOLLAR_SIGN: '$';
+DOUBLE_QUOTE: '"';
+EQUALS_OPERATOR: '=';
+EXCLAMATION_MARK: '!';
+RIGHT_ANGLE_BRACKET: '>';
+GRAVE_ACCENT: '`';
+LEFT_BRACE: '{';
+LEFT_BRACKET: '[';
+LEFT_PAREN: '(';
+LEFT_ANGLE_BRACKET: '<';
+MINUS_SIGN: '-';
+PERCENT: '%';
+PERIOD: '.';
+PLUS_SIGN: '+';
+QUESTION_MARK: '?';
+QUOTE: '\'';
+REVERSE_SOLIDUS: '\\';
+RIGHT_BRACE: '}';
+RIGHT_BRACKET: ']';
+RIGHT_PAREN: ')';
+SOLIDUS: '/';
+TILDE: '~';
+UNDERSCORE: '_';
+VERTICAL_BAR: '|';
+
+fragment HEX_DIGIT
+    : [0-9a-f]
+    ;
+
+fragment DIGIT
+    : [0-9]
+    ;
+
+fragment OCTAL_DIGIT
+    : [0-7]
+    ;
+
+fragment BINARY_DIGIT
+    : [0-1]
+    ;
+
+SP
+  : (WHITESPACE)+
+  -> channel(HIDDEN)
+  ;
+
+WHITESPACE
+    : SPACE
+    | TAB
+    | LF
+    | VT
+    | FF
+    | CR
+    | FS
+    | GS
+    | RS
+    | US
+    | '\u1680'
+    | '\u180e'
+    | '\u2000'
+    | '\u2001'
+    | '\u2002'
+    | '\u2003'
+    | '\u2004'
+    | '\u2005'
+    | '\u2006'
+    | '\u2008'
+    | '\u2009'
+    | '\u200a'
+    | '\u2028'
+    | '\u2029'
+    | '\u205f'
+    | '\u3000'
+    | '\u00a0'
+    | '\u2007'
+    | '\u202f'
+    ;
+
+BRACKETED_COMMENT: '/*' .*? '*/' -> channel(HIDDEN);
+
+SIMPLE_COMMENT_SOLIDUS: '//' ~[\r\n]* -> channel(HIDDEN);
+
+SIMPLE_COMMENT_MINUS: '--' ~[\r\n]* -> channel(HIDDEN);
+
+fragment GS : [\u001D];
+
+fragment FS : [\u001C];
+
+fragment CR : [\r];
+
+fragment Sc : [\p{Sc}];
+
+fragment SPACE : [ ];
+
+fragment Pc : [\p{Pc}];
+
+fragment TAB : [\t];
+
+fragment LF : [\n];
+
+fragment VT : [\u000B];
+
+fragment US : [\u001F];
+
+fragment FF: [\f];
+
+fragment RS: [\u001E];
diff --git a/developer_init b/developer_init
deleted file mode 100644 (file)
index 6020d58..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/bash
-
-script_path="$(dirname "$(realpath "${BASH_SOURCE[0]}")")"
-export PROJECT=$(basename "$script_path")
-export PATH="$script_path"/env/bin:$PATH
-cd development
index e69de29..1f67f41 100644 (file)
@@ -0,0 +1,26 @@
+#!/bin/bash
+
+# Set the platform type: currently "Debian" or "Fedora"
+PLATFORM="Fedora"
+
+# Update package list and install Java based on platform type
+if [ "$PLATFORM" == "Debian" ]; then
+    sudo apt-get update
+    sudo apt-get install -y default-jre
+elif [ "$PLATFORM" == "Fedora" ]; then
+    sudo dnf update -y
+    sudo dnf install -y java-1.8.0-openjdk
+else
+    echo "Unsupported platform type: $PLATFORM"
+    exit 1
+fi
+
+# Download ANTLR jar file and place it in the env directory
+mkdir -p env
+curl -o env/antlr-4.9.2-complete.jar https://www.antlr.org/download/antlr-4.9.2-complete.jar
+
+# Set environment variables for ANTLR
+export CLASSPATH=".:$(pwd)/env/antlr-4.9.2-complete.jar:$CLASSPATH"
+export PATH="$PATH:$(pwd)/env"
+
+echo "Installation complete. Java and ANTLR have been installed."
diff --git a/executor/use_env b/executor/use_env
new file mode 100644 (file)
index 0000000..a3b54b6
--- /dev/null
@@ -0,0 +1,11 @@
+#!/usr/bin/env bash
+
+script_path="$(dirname "$(realpath "${BASH_SOURCE[0]}")")"
+export PROJECT=$(basename "$script_path")
+export PATH="$script_path"/env/bin:$PATH
+
+# Set environment variables for ANTLR
+export CLASSPATH=".:$script_path/env/antlr-4.9.2-complete.jar:$CLASSPATH"
+export PATH="$PATH:$script_path/env"
+
+cd development