Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Grammar railroad diagram #231

Open
mingodad opened this issue Jul 17, 2021 · 0 comments
Open

Grammar railroad diagram #231

mingodad opened this issue Jul 17, 2021 · 0 comments

Comments

@mingodad
Copy link

Using this tool https://www.bottlecaps.de/convert/ (after some manual fixes) and manually adding the tokens from zorba/master/src/compiler/parser/scanner.l we can see a railroad diagram for the grammar in zorba/master/src/compiler/parser/parser.y copy and paste the EBNF shown bellow on https://www.bottlecaps.de/rr/ui in the tab Edit Grammar then switching to the tab View Diagram.

/*
From https://raw.githubusercontent.com/28msec/zorba/master/src/compiler/parser/parser.y
*/

/* converted on Sat Jul 17, 2021, 13:10 (UTC+02) by bison-to-w3c v0.53 which is Copyright (c) 2011-2021 by Gunther Rademacher <[email protected]> */

Module   ::= BYTE_ORDER_MARK_UTF8? SHEBANG? ModuleWithoutBOM
ERROR    ::= error UNRECOGNIZED? error*
ModuleWithoutBOM
         ::= VersionDecl? ( MainModule | LibraryModule )
VersionDecl
         ::= JSONIQ VERSION STRING_LITERAL ( ENCODING STRING_LITERAL )? SEMI
MainModule
         ::= ( SIND_DeclList ( SEMI ( VFO_DeclList ( SEMI | ERROR ) )? | ERROR ( VFO_DeclList SEMI )? ) | VFO_DeclList ( SEMI | ERROR ) )? QueryBody
LibraryModule
         ::= ModuleDecl ( SIND_DeclList SEMI )? ( VFO_DeclList SEMI )?
ModuleDecl
         ::= MODULE NAMESPACE QNAME EQUALS URI_LITERAL SEMI
SIND_DeclList
         ::= SIND_Decl ( ( SEMI | ERROR ) SIND_Decl )*
SIND_Decl
         ::= Setter
           | Import
           | NamespaceDecl
           | DefaultNamespaceDecl
           | FTOptionDecl
Setter   ::= BoundarySpaceDecl
           | DefaultCollationDecl
           | BaseURIDecl
           | ConstructionDecl
           | OrderingModeDecl
           | EmptyOrderDecl
           | CopyNamespacesDecl
           | RevalidationDecl
BoundarySpaceDecl
         ::= DECLARE BOUNDARY_SPACE ( PRESERVE | STRIP )
DefaultCollationDecl
         ::= DECLARE DEFAULT COLLATION URI_LITERAL
BaseURIDecl
         ::= DECLARE BASE_URI URI_LITERAL
ConstructionDecl
         ::= DECLARE CONSTRUCTION ( PRESERVE | STRIP )
OrderingModeDecl
         ::= DECLARE ORDERING ( ORDERED | UNORDERED )
EmptyOrderDecl
         ::= DECLARE DEFAULT ORDER _EMPTY ( GREATEST | LEAST )
CopyNamespacesDecl
         ::= DECLARE COPY_NAMESPACES ( PRESERVE | NO_PRESERVE ) COMMA ( INHERIT | NO_INHERIT )
Import   ::= SchemaImport
           | ModuleImport
           | IMPORT QNAME_SVAL error
SchemaImport
         ::= IMPORT SCHEMA SchemaPrefix? URI_LITERAL ( AT URILiteralList )?
URILiteralList
         ::= URI_LITERAL ( COMMA URI_LITERAL )*
SchemaPrefix
         ::= NAMESPACE QNAME EQUALS
           | DEFAULT ELEMENT NAMESPACE
ModuleImport
         ::= IMPORT MODULE ( NAMESPACE QNAME EQUALS )? URI_LITERAL ( AT URILiteralList )?
NamespaceDecl
         ::= DECLARE NAMESPACE QNAME EQUALS URI_LITERAL
DefaultNamespaceDecl
         ::= DECLARE DEFAULT ( ELEMENT | FUNCTION ) NAMESPACE URI_LITERAL
VFO_DeclList
         ::= VFO_Decl ( ( SEMI | ERROR ) VFO_Decl )*
VFO_Decl ::= DecimalFormatDecl
           | OptionDecl
           | CtxItemDecl
           | VarDecl
           | FunctionDecl
           | CollectionDecl
           | IndexDecl
           | IntegrityConstraintDecl
DecimalFormatDecl
         ::= DECLARE ( DEFAULT DECIMAL_FORMAT | DECIMAL_FORMAT QNAME ) DecimalFormatParamList
DecimalFormatParamList
         ::= DecimalFormatParam+
DecimalFormatParam
         ::= DecimalFormatParamName EQUALS StringLiteral
DecimalFormatParamName
         ::= DECIMAL_SEPARATOR
           | DIGIT
           | GROUPING_SEPARATOR
           | INFINITY_VALUE
           | MINUS_SIGN
           | NaN
           | PATTERN_SEPARATOR
           | PERCENT
           | PER_MILLE
           | ZERO_DIGIT
OptionDecl
         ::= DECLARE OPTION QNAME STRING_LITERAL
FTOptionDecl
         ::= DECLARE FT_OPTION FTMatchOptions
CtxItemDecl
         ::= DECLARE CONTEXT ITEM CtxItemDecl2
CtxItemDecl2
         ::= ( AS ItemType )? CtxItemDecl3
CtxItemDecl3
         ::= CtxItemDecl4
           | EXTERNAL CtxItemDecl4?
CtxItemDecl4
         ::= GETS ExprSingle
VarDecl  ::= DECLARE VarNameAndType ( GETS ExprSingle | EXTERNAL ( GETS ExprSingle )? )
VarNameAndType
         ::= AnnotationList? VARIABLE DOLLAR QNAME TypeDeclaration?
AnnotationList
         ::= Annotation+
Annotation
         ::= ( ANNOTATION_QNAME_SVAL | ANNOTATION_EQNAME_SVAL ) ( LPAR AnnotationLiteralList RPAR )?
AnnotationLiteralList
         ::= Literal ( COMMA Literal )*
FunctionDecl
         ::= DECLARE AnnotationList? FunctionDecl2
FunctionDecl2
         ::= FunctionDeclSimple
           | FunctionDeclUpdating
FunctionDeclSimple
         ::= FUNCTION FUNCTION_NAME FunctionSig ( EnclosedStatementsAndOptionalExpr | EXTERNAL )
FunctionDeclUpdating
         ::= UPDATING FUNCTION FUNCTION_NAME FunctionSig ( EnclosedStatementsAndOptionalExpr | EXTERNAL )
FunctionSig
         ::= LPAR ParamList? RPAR ( AS SequenceType )?
ParamList
         ::= Param ( COMMA Param )*
Param    ::= DOLLAR QNAME TypeDeclaration?
CollectionDecl
         ::= DECLARE AnnotationList? COLLECTION QNAME ( AS CollectionTypeDecl )?
CollectionTypeDecl
         ::= ( KindTest | JSONTest ) OccurrenceIndicator?
IndexDecl
         ::= DECLARE AnnotationList? INDEX QNAME ON NODES PathExpr BY IndexKeyList
IndexKeyList
         ::= IndexKeySpec ( COMMA IndexKeySpec )*
IndexKeySpec
         ::= PathExpr TypeDeclaration? OrderCollationSpec?
IntegrityConstraintDecl
         ::= DECLARE INTEGRITY CONSTRAINT QNAME ( ON COLLECTION QNAME ( ( FOREACH NODE )? DOLLAR QNAME CHECK ExprSingle | NODE DOLLAR QNAME CHECK UNIQUE KEY PathExpr ) | FOREIGN KEY FROM COLLECTION QNAME NODE DOLLAR QNAME KEY PathExpr TO COLLECTION QNAME NODE DOLLAR QNAME KEY PathExpr )
QueryBody
         ::= StatementsAndOptionalExprTop
StatementsAndOptionalExprTop
         ::= ( StatementsAndExpr | Statements )?
StatementsAndOptionalExpr
         ::= ( StatementsAndExpr | Statements )?
StatementsAndExpr
         ::= Statements? Expr
Statements
         ::= Statement ( ( Expr ERROR )? Statement )*
Statement
         ::= BlockStatement
           | VarDeclStatement
           | AssignStatement
           | ApplyStatement
           | ExitStatement
           | WhileStatement
           | FlowCtlStatement
           | FLWORStatement
           | IfStatement
           | TypeswitchStatement
           | SwitchStatement
           | TryStatement
           | VoidStatement
BlockStatement
         ::= LBRACE Statements RBRACE
BlockExpr
         ::= LBRACE StatementsAndOptionalExpr RBRACE
EnclosedStatementsAndOptionalExpr
         ::= LBRACE StatementsAndOptionalExpr RBRACE
VarDeclStatement
         ::= AnnotationList? VARIABLE BlockVarDecl ( COMMA BlockVarDecl )* SEMI
BlockVarDecl
         ::= DOLLAR QNAME TypeDeclaration? ( GETS ExprSingle )?
AssignStatement
         ::= DOLLAR QNAME GETS ExprSingle SEMI
ApplyStatement
         ::= ExprSimple SEMI
ExitStatement
         ::= EXIT RETURNING ExprSingle SEMI
WhileStatement
         ::= WHILE LPAR Expr RPAR Statement
FlowCtlStatement
         ::= ( BREAK | CONTINUE ) LOOP SEMI
FLWORStatement
         ::= FLWORClauseList ReturnStatement
ReturnStatement
         ::= ReturnOrSelect Statement
IfStatement
         ::= IF LPAR Expr RPAR THEN Statement ELSE Statement
TryStatement
         ::= TRY BlockStatement CatchStatement+
CatchStatement
         ::= CATCH NameTestList BlockStatement
VoidStatement
         ::= SEMI
Expr     ::= ExprSingle ( ( COMMA | ERROR ) ExprSingle )*
ExprSingle
         ::= FLWORExpr
           | SwitchExpr
           | TypeswitchExpr
           | IfExpr
           | TryExpr
           | ExprSimple
ExprSimple
         ::= AndExpr ( OR AndExpr )*
           | QuantifiedExpr
           | InsertExpr
           | DeleteExpr
           | RenameExpr
           | ReplaceExpr
           | TransformExpr
           | JSONDeleteExpr
           | JSONInsertExpr
           | JSONRenameExpr
           | JSONReplaceExpr
           | JSONAppendExpr
FLWORExpr
         ::= FLWORClauseList ReturnExpr
ReturnExpr
         ::= ReturnOrSelect ExprSingle
ReturnOrSelect
         ::= RETURN
WindowType
         ::= ( SLIDING | TUMBLING ) WINDOW
FLWORWinCondType
         ::= START
           | ONLY? END
FLWORWinCond
         ::= FLWORWinCondType WindowVars? WHEN ExprSingle
WindowClause
         ::= ForOrFrom WindowType WindowVarDecl FLWORWinCond FLWORWinCond?
CountClause
         ::= COUNT DOLLAR QNAME
ForLetWinClause
         ::= ForClause
           | LetClause
           | WindowClause
FLWORClause
         ::= ForLetWinClause
           | WhereClause
           | OrderByClause
           | GroupByClause
           | CountClause
FLWORClauseList
         ::= ForLetWinClause FLWORClause*
ForClause
         ::= ForOrFrom ( DOLLAR VarInDeclList | UNRECOGNIZED )
           | FOR error VarInDeclList
ForOrFrom
         ::= FOR
VarInDeclList
         ::= VarInDecl ( COMMA DOLLAR? VarInDecl )*
VarInDecl
         ::= QNAME TypeDeclaration? ( PositionalVar? FTScoreVar? | ALLOWING _EMPTY PositionalVar? ) _IN ExprSingle
PositionalVar
         ::= AT DOLLAR QNAME
FTScoreVar
         ::= SCORE DOLLAR QNAME
LetClause
         ::= LET VarGetsDecl ( COMMA VarGetsDecl )*
VarGetsDecl
         ::= ( DOLLAR QNAME ( TypeDeclaration FTScoreVar? )? | FTScoreVar ) GETS ExprSingle
WindowVarDecl
         ::= DOLLAR QNAME TypeDeclaration? _IN ExprSingle
WindowVars
         ::= WindowVars3
           | DOLLAR QNAME WindowVars3?
WindowVars3
         ::= PositionalVar WindowVars2?
           | WindowVars2
WindowVars2
         ::= ( PREVIOUS ( DOLLAR QNAME NEXT )? | NEXT ) DOLLAR QNAME
WhereClause
         ::= WHERE ExprSingle
GroupByClause
         ::= GROUP BY GroupSpec ( COMMA GroupSpec )*
GroupSpec
         ::= ( DOLLAR QNAME TypeDeclaration? GETS )? ExprSingle GroupCollationSpec?
GroupCollationSpec
         ::= COLLATION URI_LITERAL
OrderByClause
         ::= STABLE? ORDER BY OrderSpecList
OrderSpecList
         ::= OrderSpec ( COMMA OrderSpec )*
OrderSpec
         ::= ExprSingle OrderModifier?
OrderModifier
         ::= ( OrderDirSpec OrderEmptySpec? | OrderEmptySpec ) OrderCollationSpec?
           | OrderCollationSpec
OrderDirSpec
         ::= ASCENDING
           | DESCENDING
OrderEmptySpec
         ::= _EMPTY ( GREATEST | LEAST )
OrderCollationSpec
         ::= COLLATION URI_LITERAL
QuantifiedExpr
         ::= ( SOME | EVERY ) DOLLAR QVarInDeclList SATISFIES ExprSingle
QVarInDeclList
         ::= QVarInDecl ( COMMA DOLLAR QVarInDecl )*
QVarInDecl
         ::= QNAME TypeDeclaration? _IN ExprSingle
SwitchExpr
         ::= SWITCH LPAR Expr RPAR SwitchCaseClause+ DEFAULT ReturnOrSelect ExprSingle
SwitchCaseClause
         ::= SwitchCaseOperandList ReturnOrSelect ExprSingle
SwitchCaseOperandList
         ::= ( CASE ExprSingle )+
SwitchStatement
         ::= SWITCH LPAR Expr RPAR SwitchCaseStatement+ DEFAULT ReturnOrSelect Statement
SwitchCaseStatement
         ::= SwitchCaseOperandList ReturnOrSelect Statement
TypeswitchExpr
         ::= TYPESWITCH LPAR Expr RPAR CaseClauseList DEFAULT ( DOLLAR QNAME )? ReturnOrSelect ExprSingle
TypeswitchStatement
         ::= TYPESWITCH LPAR Expr RPAR ( CaseStatement+ DEFAULT | CaseClauseList DEFAULT DOLLAR QNAME ) ReturnOrSelect Statement
CaseClauseList
         ::= CaseClause+
CaseClause
         ::= CASE ( DOLLAR QNAME AS )? SequenceTypeList ReturnOrSelect ExprSingle
CaseStatement
         ::= CASE ( DOLLAR QNAME AS )? SequenceTypeList ReturnOrSelect Statement
SequenceTypeList
         ::= SequenceType ( VBAR SequenceType )*
IfExpr   ::= IF LPAR Expr RPAR THEN ExprSingle ELSE ExprSingle
AndExpr  ::= NotExpr ( AND NotExpr )*
ComparisonExpr
         ::= FTContainsExpr ( ( ValueComp | NodeComp | EQUALS | NE | LT_OR_START_TAG | LE | GT | GE ) FTContainsExpr )?
FTContainsExpr
         ::= StringConcatExpr ( CONTAINS TEXT FTSelection opt_FTIgnoreOption )?
StringConcatExpr
         ::= RangeExpr ( CONCAT RangeExpr )*
opt_FTIgnoreOption
         ::= FTIgnoreOption?
RangeExpr
         ::= AdditiveExpr ( TO AdditiveExpr )?
AdditiveExpr
         ::= MultiplicativeExpr ( ( PLUS | MINUS ) MultiplicativeExpr )*
MultiplicativeExpr
         ::= UnionExpr ( ( STAR | DIV | IDIV | MOD ) UnionExpr )*
UnionExpr
         ::= IntersectExceptExpr ( ( UNION | VBAR ) IntersectExceptExpr )*
IntersectExceptExpr
         ::= InstanceofExpr ( ( INTERSECT | EXCEPT ) InstanceofExpr )*
InstanceofExpr
         ::= TreatExpr ( INSTANCE OF SequenceType )?
TreatExpr
         ::= CastableExpr ( TREAT AS SequenceType )?
CastableExpr
         ::= CastExpr ( CASTABLE AS SingleType )?
CastExpr ::= UnaryExpr ( CAST AS SingleType )?
SingleType
         ::= SimpleType HOOK?
UnaryExpr
         ::= ( PLUS | MINUS )* ValueExpr
ValueExpr
         ::= ValidateExpr
           | PathExpr ( BANG PathExpr )*
           | ExtensionExpr
ValueComp
         ::= VAL_EQ
           | VAL_NE
           | VAL_LT
           | VAL_LE
           | VAL_GT
           | VAL_GE
NodeComp ::= IS
           | PRECEDES
           | FOLLOWS
ValidateExpr
         ::= VALIDATE ( LAX | _STRICT | TYPE TypeName )? LBRACE StatementsAndExpr RBRACE
ExtensionExpr
         ::= Pragma_list LBRACE StatementsAndOptionalExpr RBRACE
Pragma_list
         ::= Pragma+
Pragma   ::= PRAGMA_BEGIN ( QNAME PRAGMA_LITERAL_AND_END_PRAGMA | QNAME_SVAL_AND_END_PRAGMA | EQNAME_SVAL_AND_END_PRAGMA )
PathExpr ::= LeadingSlash RelativePathExpr?
           | SLASH_SLASH? RelativePathExpr
LeadingSlash
         ::= SLASH
RelativePathExpr
         ::= StepExpr ( ( SLASH | SLASH_SLASH ) StepExpr )*
StepExpr ::= AxisStep
           | PostfixExpr
AxisStep ::= ( ForwardStep | ReverseStep ) PredicateList?
ForwardStep
         ::= ForwardAxis NodeTest
           | AbbrevForwardStep
ForwardAxis
         ::= ( CHILD | DESCENDANT | ATTRIBUTE | SELF | DESCENDANT_OR_SELF | FOLLOWING_SIBLING | FOLLOWING ) DOUBLE_COLON
AbbrevForwardStep
         ::= AT_SIGN? NodeTest
ReverseStep
         ::= ReverseAxis NodeTest
           | DOT_DOT
ReverseAxis
         ::= ( PARENT | ANCESTOR | PRECEDING_SIBLING | PRECEDING | ANCESTOR_OR_SELF ) DOUBLE_COLON
NodeTest ::= KindTest
           | NameTest
NameTest ::= QNAME
           | Wildcard
Wildcard ::= STAR
           | ELEM_WILDCARD
           | ELEM_EQNAME_WILDCARD
           | PREFIX_WILDCARD
PostfixExpr
         ::= PrimaryExpr ( PredicateList | LPAR ArgList? RPAR )*
PredicateList
         ::= Predicate+
Predicate
         ::= LBRACK Expr RBRACK
PrimaryExpr
         ::= Literal
           | VarRef
           | ParenthesizedExpr
           | ContextItemExpr
           | FunctionCall
           | Constructor
           | OrderedExpr
           | UnorderedExpr
           | FunctionItemExpr
           | BlockExpr
           | JSONObjectConstructor
           | JSONArrayConstructor
           | JSONSimpleObjectUnion
           | JSONAccumulatorObjectUnion
Literal  ::= NumericLiteral
           | StringLiteral
NumericLiteral
         ::= DECIMAL_LITERAL
           | INTEGER_LITERAL
           | DOUBLE_LITERAL
VarRef   ::= DOLLAR QNAME
ParenthesizedExpr
         ::= LPAR Expr? RPAR
ContextItemExpr
         ::= DOLLAR_DOLLAR
OrderedExpr
         ::= ORDERED LBRACE Expr RBRACE
UnorderedExpr
         ::= UNORDERED LBRACE Expr RBRACE
FunctionCall
         ::= FUNCTION_NAME LPAR ArgList? RPAR
ArgList  ::= ( HOOK | ExprSingle ) ( COMMA ( HOOK | ExprSingle ) )*
FunctionItemExpr
         ::= LiteralFunctionItem
           | InlineFunction
LiteralFunctionItem
         ::= FUNCTION_NAME HASH INTEGER_LITERAL
InlineFunction
         ::= FUNCTION FunctionSig EnclosedStatementsAndOptionalExpr
Constructor
         ::= DirectConstructor
           | ComputedConstructor
DirectConstructor
         ::= DirElemConstructor
           | DirCommentConstructor
           | DirPIConstructor
DirElemConstructor
         ::= LT_OR_START_TAG QNAME DirAttributeList? OptionalBlank ( EMPTY_TAG_END | TAG_END DirElemContentList? START_TAG_END QNAME OptionalBlank TAG_END )
DirElemContentList
         ::= DirElemContent+
DirAttributeList
         ::= DirAttr+
DirAttr  ::= BLANK QNAME OptionalBlank EQUALS OptionalBlank DirAttributeValue
OptionalBlank
         ::= BLANK?
DirAttributeValue
         ::= QUOTE opt_QuoteAttrContentList QUOTE
           | APOS opt_AposAttrContentList APOS
opt_QuoteAttrContentList
         ::= ( ESCAPE_QUOTE | QuoteAttrValueContent )*
opt_AposAttrContentList
         ::= ( ESCAPE_APOS | AposAttrValueContent )*
QuoteAttrValueContent
         ::= QUOTE_ATTR_CONTENT
           | CommonContent
AposAttrValueContent
         ::= APOS_ATTR_CONTENT
           | CommonContent
DirElemContent
         ::= DirectConstructor
           | ELEMENT_CONTENT
           | CDataSection
           | CommonContent
CommonContent
         ::= CHAR_REF_LITERAL
           | DOUBLE_LBRACE
           | DOUBLE_RBRACE
           | LBRACE StatementsAndExpr RBRACE
DirCommentConstructor
         ::= XML_COMMENT_BEGIN XML_COMMENT_LITERAL? XML_COMMENT_END
DirPIConstructor
         ::= PI_BEGIN QNAME ( PI_END | CHAR_LITERAL_AND_PI_END )
CDataSection
         ::= CDATA_BEGIN CHAR_LITERAL_AND_CDATA_END
ComputedConstructor
         ::= CompDocConstructor
           | CompElemConstructor
           | CompAttrConstructor
           | CompTextConstructor
           | CompCommentConstructor
           | CompPIConstructor
           | CompNamespaceConstructor
CompDocConstructor
         ::= DOCUMENT LBRACE StatementsAndExpr RBRACE
CompElemConstructor
         ::= ( COMP_ELEMENT_QNAME_LBRACE | ELEMENT LBRACE Expr RBRACE LBRACE ) StatementsAndOptionalExpr RBRACE
CompAttrConstructor
         ::= ( COMP_ATTRIBUTE_QNAME_LBRACE | ATTRIBUTE LBRACE Expr RBRACE LBRACE ) StatementsAndOptionalExpr RBRACE
CompTextConstructor
         ::= TEXT LBRACE StatementsAndExpr RBRACE
CompCommentConstructor
         ::= COMMENT LBRACE StatementsAndExpr RBRACE
CompPIConstructor
         ::= ( COMP_PI_NCNAME_LBRACE | PROCESSING_INSTRUCTION LBRACE Expr RBRACE LBRACE ) StatementsAndOptionalExpr RBRACE
CompNamespaceConstructor
         ::= ( COMP_NS_NCNAME_LBRACE | NAMESPACE LBRACE Expr RBRACE LBRACE ) StatementsAndExpr RBRACE
TypeDeclaration
         ::= AS SequenceType
SequenceType
         ::= ItemType OccurrenceIndicator?
           | EMPTY_SEQUENCE LPAR RPAR
OccurrenceIndicator
         ::= HOOK
           | STAR
           | PLUS
ItemType ::= GeneralizedAtomicType
           | KindTest
           | ( ITEM | STRUCTURED_ITEM ) LPAR RPAR
           | FunctionTest
           | ParenthesizedItemType
           | JSONTest
GeneralizedAtomicType
         ::= QNAME
SimpleType
         ::= QNAME
KindTest ::= DocumentTest
           | ElementTest
           | AttributeTest
           | SchemaElementTest
           | SchemaAttributeTest
           | PITest
           | CommentTest
           | TextTest
           | NamespaceTest
           | AnyKindTest
AnyKindTest
         ::= NODE_KIND_TEST LPAR RPAR
NODE_KIND_TEST
         ::= NODE
DocumentTest
         ::= DOCUMENT_NODE LPAR ( ElementTest | SchemaElementTest )? RPAR
NamespaceTest
         ::= NS_NODE LPAR RPAR
TextTest ::= TEXT LPAR RPAR
CommentTest
         ::= COMMENT LPAR RPAR
PITest   ::= PROCESSING_INSTRUCTION LPAR ( QNAME | STRING_LITERAL )? RPAR
AttributeTest
         ::= ATTRIBUTE LPAR ( ( QNAME | STAR ) ( COMMA TypeName )? )? RPAR
SchemaAttributeTest
         ::= SCHEMA_ATTRIBUTE LPAR QNAME RPAR
ElementTest
         ::= ELEMENT LPAR ( ( QNAME | STAR ) ( COMMA ( TypeName | TypeName_WITH_HOOK ) )? )? RPAR
SchemaElementTest
         ::= SCHEMA_ELEMENT LPAR QNAME RPAR
TypeName ::= QNAME
TypeName_WITH_HOOK
         ::= QNAME HOOK
StringLiteral
         ::= STRING_LITERAL
FunctionTest
         ::= AnyFunctionTest
           | TypedFunctionTest
AnyFunctionTest
         ::= FUNCTION LPAR STAR RPAR
TypedFunctionTest
         ::= FUNCTION LPAR ( SequenceType ( COMMA SequenceType )* )? RPAR AS SequenceType
ParenthesizedItemType
         ::= LPAR ItemType RPAR
RevalidationDecl
         ::= DECLARE REVALIDATION ( _STRICT | LAX | SKIP )
InsertExpr
         ::= INSERT ( NODE | NODES ) ExprSingle ( ( AS ( FIRST | LAST ) )? INTO | AFTER | BEFORE ) ExprSingle
DeleteExpr
         ::= _DELETE ( NODE | NODES ) ExprSingle
ReplaceExpr
         ::= REPLACE ( VALUE OF )? NODE ExprSingle WITH ExprSingle
RenameExpr
         ::= RENAME NODE ExprSingle AS ExprSingle
TransformExpr
         ::= COPY DOLLAR VarNameDecl ( COMMA DOLLAR VarNameDecl )* MODIFY ExprSingle ReturnOrSelect ExprSingle
VarNameDecl
         ::= QNAME GETS ExprSingle
TryExpr  ::= TRY LBRACE Expr RBRACE CatchExpr+
CatchExpr
         ::= CATCH NameTestList BracedExpr
BracedExpr
         ::= LBRACE Expr RBRACE
NameTestList
         ::= NameTest ( VBAR NameTest )*
FTSelection
         ::= FTAnd ( FTOR FTAnd )* opt_FTPosFilter_list
opt_FTPosFilter_list
         ::= FTPosFilter*
FTAnd    ::= FTMildNot ( FTAND FTMildNot )*
FTMildNot
         ::= FTUnaryNot ( NOT _IN FTUnaryNot )*
FTUnaryNot
         ::= FTNOT? FTPrimaryWithOptions
FTPrimaryWithOptions
         ::= FTPrimary opt_FTMatchOptions opt_FTWeight
opt_FTMatchOptions
         ::= FTMatchOptions?
opt_FTWeight
         ::= FTWeight?
FTWeight ::= WEIGHT LBRACE Expr RBRACE
FTPrimary
         ::= FTWords opt_FTTimes
           | LPAR FTSelection RPAR
           | FTExtensionSelection
opt_FTTimes
         ::= FTTimes?
FTExtensionSelection
         ::= Pragma_list LBRACE opt_FTSelection RBRACE
opt_FTSelection
         ::= FTSelection?
FTWords  ::= FTWordsValue opt_FTAnyallOption
FTWordsValue
         ::= Literal
           | LBRACE Expr RBRACE
opt_FTAnyallOption
         ::= FTAnyallOption?
FTAnyallOption
         ::= ANY opt_word
           | ALL opt_words
           | PHRASE
opt_word ::= WORD?
opt_words
         ::= WORDS?
FTPosFilter
         ::= FTOrder
           | FTWindow
           | FTDistance
           | FTScope
           | FTContent
FTOrder  ::= ORDERED
FTWindow ::= WINDOW AdditiveExpr FTUnit
FTDistance
         ::= DISTANCE FTRange FTUnit
FTUnit   ::= WORDS
           | SENTENCES
           | PARAGRAPHS
FTMatchOptions
         ::= ( USING FTMatchOption )+
FTMatchOption
         ::= FTCaseOption
           | FTDiacriticsOption
           | FTExtensionOption
           | FTLanguageOption
           | FTStemOption
           | FTStopWordOption
           | FTThesaurusOption
           | FTWildCardOption
FTCaseOption
         ::= CASE ( SENSITIVE | INSENSITIVE )
           | LOWERCASE
           | UPPERCASE
FTDiacriticsOption
         ::= DIACRITICS ( SENSITIVE | INSENSITIVE )
FTExtensionOption
         ::= OPTION QNAME STRING_LITERAL
FTStemOption
         ::= NO? STEMMING
FTThesaurusOption
         ::= THESAURUS ( FTThesaurusID_or_default | LPAR FTThesaurusID_or_default opt_FTThesaurus_list RPAR )
           | NO THESAURUS
FTThesaurusID_or_default
         ::= FTThesaurusID
           | DEFAULT
opt_FTThesaurus_list
         ::= ( COMMA FTThesaurusID )*
FTThesaurusID
         ::= AT STRING_LITERAL opt_relationship opt_levels
opt_relationship
         ::= ( RELATIONSHIP STRING_LITERAL )?
opt_levels
         ::= ( FTRange LEVELS )?
FTStopWordOption
         ::= STOP WORDS ( FTStopWords | DEFAULT ) opt_FTStopWordsInclExcl_list
           | NO STOP WORDS
FTStopWords
         ::= AT STRING_LITERAL
           | LPAR STRING_LITERAL ( COMMA STRING_LITERAL )* RPAR
opt_FTStopWordsInclExcl_list
         ::= FTStopWordsInclExcl*
FTStopWordsInclExcl
         ::= ( UNION | EXCEPT ) FTStopWords
FTLanguageOption
         ::= LANGUAGE STRING_LITERAL
FTWildCardOption
         ::= NO? WILDCARDS
FTContent
         ::= AT ( START | END )
           | ENTIRE CONTENT
FTTimes  ::= OCCURS FTRange TIMES
FTRange  ::= ( EXACTLY | FROM AdditiveExpr TO | AT ( LEAST | MOST ) ) AdditiveExpr
FTScope  ::= ( SAME | DIFFERENT ) FTBigUnit
FTBigUnit
         ::= SENTENCE
           | PARAGRAPH
FTIgnoreOption
         ::= WITHOUT CONTENT UnionExpr
JSONArrayConstructor
         ::= LBRACK Expr? RBRACK
JSONSimpleObjectUnion
         ::= L_SIMPLE_OBJ_UNION Expr? R_SIMPLE_OBJ_UNION
JSONAccumulatorObjectUnion
         ::= L_ACCUMULATOR_OBJ_UNION Expr? R_ACCUMULATOR_OBJ_UNION
JSONObjectConstructor
         ::= LBRACE JSONPairList RBRACE
JSONPairList
         ::= ExprSingle COLON ExprSingle ( COMMA ExprSingle COLON ExprSingle )*
JSONInsertExpr
         ::= INSERT JSON ( ExprSingle INTO ( ExprSingle AT POSITION )? | JSONPairList INTO ) ExprSingle
JSONAppendExpr
         ::= APPEND JSON ExprSingle INTO ExprSingle
JSONDeleteExpr
         ::= _DELETE JSON PostfixExpr
JSONRenameExpr
         ::= RENAME JSON PostfixExpr AS ExprSingle
JSONReplaceExpr
         ::= REPLACE VALUE OF JSON PostfixExpr WITH ExprSingle
JSONTest ::= ( JSON_ITEM | ARRAY | OBJECT ) LPAR RPAR
URI_LITERAL
         ::= STRING_LITERAL
QNAME    ::= FUNCTION_NAME
           | NCNAME_SVAL
           | ATTRIBUTE
           | COMMENT
           | DOCUMENT_NODE
           | NS_NODE
           | ELEMENT
           | ITEM
           | IF
           | NODE
           | PROCESSING_INSTRUCTION
           | SCHEMA_ATTRIBUTE
           | SCHEMA_ELEMENT
           | TEXT
           | TYPESWITCH
           | SWITCH
           | EMPTY_SEQUENCE
           | WHILE
           | JSON
           | ARRAY
           | OBJECT
           | JSON_ITEM
           | STRUCTURED_ITEM
FUNCTION_NAME
         ::= EQNAME
           | QNAME_SVAL
           | XQUERY
           | _EMPTY
           | BOUNDARY_SPACE
           | FT_OPTION
           | BASE_URI
           | LAX
           | _STRICT
           | IDIV
           | DOCUMENT
           | FTNOT
           | NOT
           | SENSITIVE
           | INSENSITIVE
           | DIACRITICS
           | WITHOUT
           | STEMMING
           | THESAURUS
           | STOP
           | WILDCARDS
           | ENTIRE
           | CONTENT
           | WORD
           | START
           | END
           | MOST
           | SKIP
           | COPY
           | GENERAL
           | VALUE
           | VAL_EQ
           | VAL_NE
           | VAL_LT
           | VAL_LE
           | VAL_GT
           | VAL_GE
           | AT
           | CONTEXT
           | VARIABLE
           | RETURN
           | FOR
           | FROM
           | ALLOWING
           | SLIDING
           | TUMBLING
           | PREVIOUS
           | NEXT
           | ONLY
           | WHEN
           | COUNT
           | _IN
           | LET
           | WHERE
           | BY
           | GROUP
           | ORDER
           | STABLE
           | ASCENDING
           | DESCENDING
           | GREATEST
           | LEAST
           | COLLATION
           | SOME
           | EVERY
           | SATISFIES
           | CASE
           | AS
           | THEN
           | ELSE
           | OR
           | AND
           | INSTANCE
           | OF
           | CASTABLE
           | TO
           | DIV
           | MOD
           | UNION
           | INTERSECT
           | EXCEPT
           | VALIDATE
           | TYPE
           | CAST
           | TREAT
           | IS
           | PRESERVE
           | STRIP
           | NAMESPACE
           | EXTERNAL
           | ENCODING
           | NO_PRESERVE
           | INHERIT
           | NO_INHERIT
           | DECLARE
           | CONSTRUCTION
           | ORDERING
           | DEFAULT
           | COPY_NAMESPACES
           | OPTION
           | VERSION
           | IMPORT
           | SCHEMA
           | MODULE
           | FUNCTION
           | SCORE
           | CONTAINS
           | WEIGHT
           | WINDOW
           | DISTANCE
           | OCCURS
           | TIMES
           | SAME
           | DIFFERENT
           | LOWERCASE
           | UPPERCASE
           | RELATIONSHIP
           | LEVELS
           | LANGUAGE
           | ANY
           | ALL
           | EXACTLY
           | WORDS
           | SENTENCES
           | SENTENCE
           | PHRASE
           | PARAGRAPH
           | PARAGRAPHS
           | MODIFY
           | FIRST
           | APPEND
           | INSERT
           | REPLACE
           | RENAME
           | _DELETE
           | BEFORE
           | AFTER
           | REVALIDATION
           | WITH
           | NODES
           | LAST
           | INTO
           | SIMPLE
           | SEQUENTIAL
           | UPDATING
           | ORDERED
           | UNORDERED
           | RETURNING
           | EXIT
           | LOOP
           | BREAK
           | CONTINUE
           | TRY
           | CATCH
           | USING
           | SET
           | INDEX
           | UNIQUE
           | NON
           | ON
           | RANGE
           | EQUALITY
           | MANUALLY
           | AUTOMATICALLY
           | MAINTAINED
           | DECIMAL_FORMAT
           | DECIMAL_SEPARATOR
           | GROUPING_SEPARATOR
           | INFINITY_VALUE
           | MINUS_SIGN
           | NaN
           | PERCENT
           | PER_MILLE
           | ZERO_DIGIT
           | DIGIT
           | PATTERN_SEPARATOR
           | COLLECTION
           | CONSTOPT
           | APPEND_ONLY
           | QUEUE
           | MUTABLE
           | READ_ONLY
           | INTEGRITY
           | CONSTRAINT
           | CHECK
           | KEY
           | FOREACH
           | FOREIGN
           | KEYS
           | ANCESTOR
           | CHILD
           | DESCENDANT
           | PARENT
           | PRECEDING
           | SELF
           | FOLLOWING
           | ANCESTOR_OR_SELF
           | DESCENDANT_OR_SELF
           | FOLLOWING_SIBLING
           | PRECEDING_SIBLING
           | POSITION
EQNAME   ::= EQNAME_SVAL

// Tokens from https://raw.githubusercontent.com/28msec/zorba/master/src/compiler/parser/scanner.l

LPAR ::= "("
SEMI ::= ";"
COMMA ::= ","
MINUS ::= "-"
PLUS ::= "+"
SLASH ::= "/"
SLASH_SLASH ::= "//"
BANG ::= "!"
AT_SIGN ::= "@"
RPAR ::= ")"
STAR ::= "*"
DOT_DOT ::= ".."
DOT ::= "."
HOOK ::= "?"
DOLLAR ::= "$"
HASH ::= "#"
COLON ::= ":"
DOUBLE_COLON ::= "::"
PERCENTAGE ::= "%"
CONCAT ::= "||"

DECLARE ::= "declare"

MODULE ::= "module"

/*
"element" { PUSH_STATE(MODE_ELEM_COMP_CONSTR); }
"attribute" { PUSH_STATE(MODE_ATTR_COMP_CONSTR); }
"processing-instruction" { PUSH_STATE(MODE_PI_COMP_CONSTR); }
"namespace" { PUSH_STATE(MODE_NS_COMP_CONSTR); }
*/

IF ::= "if"
RETURNING ::= "returning"

EXIT ::= "exit"
WITH ::= "with"
BREAK ::= "break"
LOOP ::= "loop"
CONTINUE ::= "continue"
WHILE ::= "while"
SET ::= "set"
VALIDATE ::= "validate"
TYPE ::= "type"
SWITCH ::= "switch"
TYPESWITCH ::= "typeswitch"
DOCUMENT ::= "document"
TEXT ::= "text"
COMMENT ::= "comment"
FUNCTION ::= "function"
SIMPLE ::= "simple"
UPDATING ::= "updating"
SEQUENTIAL ::= "sequential"
ORDERED ::= "ordered"
UNORDERED ::= "unordered"
SCHEMA_ELEMENT ::= "schema-element"
SCHEMA_ATTRIBUTE ::= "schema-attribute"
NODE ::= "node"
DOCUMENT_NODE ::= "document-node"
NS_NODE ::= "namespace-node"
CONSTRUCTION ::= "construction"
DEFAULT ::= "default"
ORDER ::= "order"
COLLATION ::= "collation"
BASE_URI ::= "base-uri"
IMPORT ::= "import"
SCHEMA ::= "schema"
COPY_NAMESPACES ::= "copy-namespaces"
FOR ::= "for"
LET ::= "let"
ALLOWING ::= "allowing"
SLIDING ::= "sliding"
TUMBLING ::= "tumbling"
PREVIOUS ::= "previous"
NEXT ::= "next"
ONLY ::= "only"
WHEN ::= "when"
COUNT ::= "count"
USING ::= "using"
SOME ::= "some"
EVERY ::= "every"
CONTEXT ::= "context"
VARIABLE ::= "variable"
BOUNDARY_SPACE ::= "boundary-space"
ORDERING ::= "ordering"
XQUERY ::= "xquery"
VERSION ::= "version"
OPTION ::= "option"
AT ::= "at"
REVALIDATION ::= "revalidation"
AS ::= "as"
TRY ::= "try"

ANCESTOR_OR_SELF ::= "ancestor-or-self"
ANCESTOR ::= "ancestor"
CHILD ::= "child"
DESCENDANT_OR_SELF ::= "descendant-or-self"
DESCENDANT ::= "descendant"
FOLLOWING_SIBLING ::= "following-sibling"
FOLLOWING ::= "following"
PARENT ::= "parent"
PRECEDING_SIBLING ::= "preceding-sibling"
PRECEDING ::= "preceding"
SELF ::= "self"


DECIMAL_FORMAT ::= "decimal-format"
DECIMAL_SEPARATOR ::= "decimal-separator"
GROUPING_SEPARATOR ::= "grouping-separator"
INFINITY_VALUE ::= "infinity"
MINUS_SIGN ::= "minus-sign"
NaN ::= "NaN"
PERCENT ::= "percent"
PER_MILLE ::= "per-mille"
ZERO_DIGIT ::= "zero-digit"
DIGIT ::= "digit"
PATTERN_SEPARATOR ::= "pattern-separator"

COLLECTION ::= "collection"
CONSTOPT ::= "const"
APPEND_ONLY ::= "append-only"
QUEUE ::= "queue"
MUTABLE ::= "mutable"
READ_ONLY ::= "read-only"

INDEX ::= "index"
UNIQUE ::= "unique"
NON ::= "non"
MANUALLY ::= "manually"
AUTOMATICALLY ::= "automatically"
MAINTAINED ::= "maintained"
RANGE ::= "range"
EQUALITY ::= "equality"
ON ::= "on"
GENERAL ::= "general"

INTEGRITY ::= "integrity"
CONSTRAINT ::= "constraint"
CHECK ::= "check"
KEY ::= "key"
FOREACH ::= "foreach"
FOREIGN ::= "foreign"
KEYS ::= "keys"

LBRACK ::= "["
RBRACK ::= "]"

L_ACCUMULATOR_OBJ_UNION ::= "{["
RBRACK ::= "]}"

L_SIMPLE_OBJ_UNION ::= "{|"
R_SIMPLE_OBJ_UNION ::= "|}"
JSON ::= "json"
APPEND ::= "append"
POSITION ::= "position"
JSON_ITEM ::= "json-item"
STRUCTURED_ITEM ::= "structured-item"
ARRAY ::= "array"
OBJECT ::= "object"

CONTAINS ::= "contains"
FTAND ::= "ftand"
FTOR ::= "ftor"
FTNOT ::= "ftnot"
NOT ::= "not"
_IN ::= "in"
ALL ::= "all"
WORDS ::= "words"
ANY ::= "any"
WORD ::= "word"
END ::= "end"
LEAST ::= "least"
MOST ::= "most"
START ::= "start"
CASE ::= "case"
INSENSITIVE ::= "insensitive"
SENSITIVE ::= "sensitive"
FT_OPTION ::= "ft-option"
DIACRITICS ::= "diacritics"
DIFFERENT ::= "different"
DISTANCE ::= "distance"
ENTIRE ::= "entire"
CONTENT ::= "content"
EXACTLY ::= "exactly"
FROM ::= "from"
LANGUAGE ::= "language"
LEVELS ::= "levels"
LOWERCASE ::= "lowercase"
NO ::= "no"
OCCURS ::= "occurs"
PARAGRAPH ::= "paragraph"
PARAGRAPHS ::= "paragraphs"
PHRASE ::= "phrase"
RELATIONSHIP ::= "relationship"
SAME ::= "same"
SCORE ::= "score"
SENTENCE ::= "sentence"
SENTENCES ::= "sentences"
TIMES ::= "times"
UPPERCASE ::= "uppercase"
WEIGHT ::= "weight"
WINDOW ::= "window"
WITHOUT ::= "without"
STEMMING ::= "stemming"
STOP ::= "stop"
THESAURUS ::= "thesaurus"
WILDCARDS ::= "wildcards"
GETS ::= ":="
DIV ::= "div"
EQUALS ::= "="
EXCEPT ::= "except"
VAL_EQ ::= "eq"
VAL_GE ::= "ge"
VAL_GT ::= "gt"
VAL_LE ::= "le"
VAL_LT ::= "lt"
VAL_NE ::= "ne"
GE ::= ">="
FOLLOWS ::= ">>"
GT ::= ">"
IDIV ::= "idiv"
INTERSECT ::= "intersect"
IS ::= "is"
LE ::= "<="
PRECEDES ::= "<<"
MOD ::= "mod"
NE ::= "!="
GROUP ::= "group"
BY ::= "by"
STABLE ::= "stable"
OR ::= "or"
RETURN ::= "return"

SATISFIES ::= "satisfies"
TO ::= "to"
UNION ::= "union"
VBAR ::= "|"
WHERE ::= "where"
PRESERVE ::= "preserve"
STRIP ::= "strip"

INSERT ::= "insert"
_DELETE ::= "delete"
REPLACE ::= "replace"
VALUE ::= "value"
OF ::= "of"
RENAME ::= "rename"
COPY ::= "copy"
NODES ::= "nodes"
INTO ::= "into"
AFTER ::= "after"
BEFORE ::= "before"
MODIFY ::= "modify"

_STRICT ::= "strict"
LAX ::= "lax"
SKIP ::= "skip"
THEN ::= "then"
ELSE ::= "else"
EXTERNAL ::= "external"
AND ::= "and"

INHERIT ::= "inherit"
NO_INHERIT ::= "no-inherit"
NO_PRESERVE ::= "no-preserve"
EMPTY_SEQUENCE ::= "empty-sequence"
ITEM ::= "item"
CAST ::= "cast"
CASTABLE ::= "castable"
INSTANCE ::= "instance"
TREAT ::= "treat"
FIRST ::= "first"
LAST ::= "last"
CATCH ::= "catch"
_EMPTY ::= "empty"
GREATEST ::= "greatest"
ASCENDING ::= "ascending"
DESCENDING ::= "descending"
ENCODING ::= "encoding"

XML_COMMENT_BEGIN ::= "<!--"
PI_BEGIN ::= "<?"
CDATA_BEGIN ::= "<![CDATA["
LT_OR_START_TAG ::= "<"
MODE_EXPR_DOC_COMMENT ::= "(:~"
MODE_EXPR_COMMENT ::= "(:"
PRAGMA_BEGIN ::= "(#"
LBRACE ::= "{"
RBRACE ::= "}"

TAG_END ::= ">"
QUOTE ::= "\"
APOS ::= "\'"
EQUALS ::= "="
EMPTY_TAG_END ::= "/>"

START_TAG_END ::= "</"
LBRACE ::= "{"
XML_COMMENT_BEGIN ::= "<!--"
PI_BEGIN ::= "<?"
CDATA_BEGIN ::= "<![CDATA["
LT_OR_START_TAG ::= "<"
DOUBLE_LBRACE ::= "{{"
DOUBLE_RBRACE ::= "}}"

TAG_END ::= ">"
XML_COMMENT_END ::= "-->"
PI_END ::= "?>"

QUOTE ::= "\"
LBRACE ::= "{"
DOUBLE_LBRACE ::= "{{"
DOUBLE_RBRACE ::= "}}"

APOS ::= "\'"
LBRACE ::= "{"
DOUBLE_LBRACE ::= "{{"
DOUBLE_RBRACE ::= "}}"

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant