BNF for xpath-grammar.jj

NON-TERMINALS

XPath2 ::= QueryList <EOF>
QueryList ::= Module ( <QuerySeparator> ( Module )? )*
Module ::= ( VersionDecl )? ( MainModule | LibraryModule )
VersionDecl ::= <XQueryVersion> ( <StringLiteralForProlog> | <URILiteral> ) ( <XQueryEncoding> ( <StringLiteralForProlog> | <URILiteral> ) )? Separator
MainModule ::= Prolog QueryBody
LibraryModule ::= ModuleDecl Prolog
ModuleDecl ::= <ModuleNamespace> <NCNameForProlog> <AssignEquals> <URILiteral> Separator
Prolog ::= ( ( Setter | Import | NamespaceDecl | DefaultNamespaceDecl ) Separator )* ( ( VarDecl | FunctionDecl | OptionDecl | FTOptionDecl ) Separator )*
Setter ::= ( BoundarySpaceDecl | DefaultCollationDecl | BaseURIDecl | ConstructionDecl | OrderingModeDecl | EmptyOrderDecl | CopyNamespacesDecl )
Import ::= ( SchemaImport | ModuleImport )
Separator ::= <SemiColon>
NamespaceDecl ::= <DeclareNamespace> <NCNameForProlog> <AssignEquals> <URILiteral>
BoundarySpaceDecl ::= <DeclareXMLSpace> ( <Preserve> | <Strip> )
DefaultNamespaceDecl ::= ( <DeclareDefaultElement> | <DeclareDefaultFunction> ) <Namespace> <URILiteral>
OptionDecl ::= <DeclareOption> <QNameForProlog> ( <StringLiteralForProlog> | <URILiteral> )
FTOptionDecl ::= <DeclareFTOption> FTMatchOption
OrderingModeDecl ::= <DeclareOrdering> ( <Ordered> | <Unordered> )
EmptyOrderDecl ::= <DeclareDefaultOrder> ( <EmptyGreatestForProlog> | <EmptyLeastForProlog> )
CopyNamespacesDecl ::= <DeclareCopyNamespace> PreserveMode <CommaForProlog> InheritMode
PreserveMode ::= ( <Preserve> | <NoPreserve> )
InheritMode ::= ( <Inherit> | <NoInherit> )
DefaultCollationDecl ::= <DeclareCollation> <URILiteral>
BaseURIDecl ::= <DeclareBaseURI> <URILiteral>
SchemaImport ::= <ImportSchemaToken> ( SchemaPrefix )? <URILiteral> ( <AtURILiteral> ( <CommaForProlog> <URILiteral> )* )?
SchemaPrefix ::= ( ( <Namespace> <NCNameForProlog> <AssignEquals> ) | ( <DefaultElement> <Namespace> ) )
ModuleImport ::= <ImportModuleToken> ( <Namespace> <NCNameForProlog> <AssignEquals> )? <URILiteral> ( <AtURILiteral> ( <CommaForProlog> <URILiteral> )* )?
VarDecl ::= <DefineVariable> <VariableIndicatorForProlog> <QNameForProlog> ( TypeDeclaration )? ( ( <ColonEqualsForProlog> ExprSingle ) | <External> )
ConstructionDecl ::= <DeclareConstruction> ( <Strip> | <Preserve> )
FunctionDecl ::= ( <DefineFunction> ) <QNameForProlog> <LparForProlog> ( ParamList )? <Rpar> ( <AsForProlog> SequenceType )? ( EnclosedExpr | <External> )
ParamList ::= Param ( ( <Comma> | <CommaForProlog> ) Param )*
Param ::= <VariableIndicatorForProlog> <QNameForProlog> ( TypeDeclaration )?
EnclosedExpr ::= ( <Lbrace> | <LbraceExprEnclosure> | <LbraceExprEnclosureForProlog> ) Expr <Rbrace>
QueryBody ::= ( Expr )
Expr ::= ExprSingle ( <Comma> ExprSingle )*
ExprSingle ::= ( FLWORExpr | QuantifiedExpr | TypeswitchExpr | IfExpr | OrExpr )
FLWORExpr ::= ( ( ForClause | LetClause ) )+ ( WhereClause )? ( OrderByClause )? ( <Return> ) ExprSingle
ForClause ::= <ForVariable> <VarName> ( TypeDeclaration )? ( PositionalVar )? ( FTScoreVar )? <In> ExprSingle ( <Comma> <VariableIndicator> <VarName> ( TypeDeclaration )? ( PositionalVar )? ( FTScoreVar )? <In> ExprSingle )*
PositionalVar ::= <AtWord> <VariableIndicator> <VarName>
FTScoreVar ::= <FTScoreVariable> <VarName>
LetClause ::= ( ( <LetVariable> <VarName> ( TypeDeclaration )? ( FTScoreVar )? ) | ( <FTLetScoreVariable> <VarName> ) ) <ColonEquals> ExprSingle ( <Comma> ( ( <VariableIndicator> <VarName> ( TypeDeclaration )? ( FTScoreVar )? ) | FTScoreVar ) <ColonEquals> ExprSingle )*
WhereClause ::= <Where> ExprSingle
OrderByClause ::= ( <OrderBy> | <OrderByStable> ) OrderSpecList
OrderSpecList ::= OrderSpec ( <Comma> OrderSpec )*
OrderSpec ::= ExprSingle OrderModifier
OrderModifier ::= ( ( <Ascending> | <Descending> ) )? ( ( <EmptyGreatest> | <EmptyLeast> ) )? ( <Collation> <URILiteralToOperator> )?
QuantifiedExpr ::= ( <Some> | <Every> ) <VarName> ( TypeDeclaration )? <In> ExprSingle ( <Comma> <VariableIndicator> <VarName> ( TypeDeclaration )? <In> ExprSingle )* <Satisfies> ExprSingle
TypeswitchExpr ::= <TypeswitchLpar> Expr <Rpar> ( CaseClause )+ <Default> ( <VariableIndicator> <VarName> )? ( <Return> ) ExprSingle
CaseClause ::= <Case> ( <VariableIndicatorForCase> <VarName> <As> )? SequenceType ( <Return> ) ExprSingle
IfExpr ::= <IfLpar> Expr <Rpar> <Then> ExprSingle <Else> ExprSingle
OperatorExpr ::= OrExpr
OrExpr ::= AndExpr ( <Or> AndExpr )*
AndExpr ::= ComparisonExpr ( <And> ComparisonExpr )*
ComparisonExpr ::= FTContainsExpr ( ( ValueComp | GeneralComp | NodeComp ) FTContainsExpr )?
FTContainsExpr ::= RangeExpr ( <FTContainsIndicator> FTSelection ( FTIgnoreOption )? )?
RangeExpr ::= AdditiveExpr ( <To> AdditiveExpr )?
AdditiveExpr ::= MultiplicativeExpr ( ( <Plus> | <Minus> ) MultiplicativeExpr )*
MultiplicativeExpr ::= UnionExpr ( ( <Multiply> | <Div> | <Idiv> | <Mod> ) UnionExpr )*
UnionExpr ::= IntersectExceptExpr ( ( <Union> | <Vbar> ) IntersectExceptExpr )*
IntersectExceptExpr ::= InstanceofExpr ( ( <Intersect> | <Except> ) InstanceofExpr )*
InstanceofExpr ::= TreatExpr ( <Instanceof> SequenceType )?
TreatExpr ::= CastableExpr ( <TreatAs> SequenceType )?
CastableExpr ::= CastExpr ( <Castable> SingleType )?
CastExpr ::= UnaryExpr ( <CastAs> SingleType )?
UnaryExpr ::= ( <UnaryMinus> | <UnaryPlus> )* ValueExpr
ValueExpr ::= ( ValidateExpr | PathExpr | ExtensionExpr )
GeneralComp ::= ( <Equals> | <NotEquals> | <Lt> | <LtEquals> | <Gt> | <GtEquals> )
ValueComp ::= ( <FortranEq> | <FortranNe> | <FortranLt> | <FortranLe> | <FortranGt> | <FortranGe> )
NodeComp ::= ( <Is> | <LtLt> | <GtGt> )
ValidateExpr ::= ( <ValidateLbrace> | ( <ValidateSchemaMode> <LbraceExprEnclosure> ) ) Expr <Rbrace>
ExtensionExpr ::= ( Pragma )+ <LbraceExprEnclosure> ( Expr )? <Rbrace>
Pragma ::= <PragmaOpen> ( <S> )? <QNameForPragma> PragmaContents <PragmaClose>
PragmaContents ::= ( <ExtensionContentChar> )*
PathExpr ::= ( ( <Root> ( RelativePathExpr )? ) | ( <RootDescendants> RelativePathExpr ) | RelativePathExpr )
RelativePathExpr ::= StepExpr ( ( <Slash> | <SlashSlash> ) StepExpr )*
StepExpr ::= ( AxisStep | FilterExpr )
AxisStep ::= ( ForwardStep | ReverseStep ) PredicateList
ForwardStep ::= ( ( ForwardAxis NodeTest ) | AbbrevForwardStep )
ForwardAxis ::= ( <AxisChild> | <AxisDescendant> | <AxisAttribute> | <AxisSelf> | <AxisDescendantOrSelf> | <AxisFollowingSibling> | <AxisFollowing> )
AbbrevForwardStep ::= ( <At> )? NodeTest
ReverseStep ::= ( ( ReverseAxis NodeTest ) | AbbrevReverseStep )
ReverseAxis ::= ( <AxisParent> | <AxisAncestor> | <AxisPrecedingSibling> | <AxisPreceding> | <AxisAncestorOrSelf> )
AbbrevReverseStep ::= <DotDot>
NodeTest ::= ( KindTest | NameTest )
NameTest ::= ( <QName> | Wildcard )
Wildcard ::= ( <Star> | <NCNameColonStar> | <StarColonNCName> )
FilterExpr ::= PrimaryExpr PredicateList
PredicateList ::= ( Predicate )*
Predicate ::= <Lbrack> Expr <Rbrack>
PrimaryExpr ::= ( Literal | VarRef | ParenthesizedExpr | ContextItemExpr | FunctionCall | Constructor | OrderedExpr | UnorderedExpr )
Literal ::= ( NumericLiteral | <StringLiteral> )
NumericLiteral ::= ( <IntegerLiteral> | <DecimalLiteral> | <DoubleLiteral> )
VarRef ::= <VariableIndicator> <VarName>
ParenthesizedExpr ::= <Lpar> ( Expr )? <Rpar>
ContextItemExpr ::= <Dot>
OrderedExpr ::= <OrderedOpen> Expr <Rbrace>
UnorderedExpr ::= <UnorderedOpen> Expr <Rbrace>
FunctionCall ::= ( <QNameLpar> ) ( ExprSingle ( <Comma> ExprSingle )* )? <Rpar>
Constructor ::= ( DirectConstructor | ComputedConstructor )
DirectConstructor ::= ( DirElemConstructor | DirCommentConstructor | DirPIConstructor )
DirElemConstructor ::= ( <StartTagOpenRoot> | <StartTagOpen> ) <TagQName> DirAttributeList ( <EmptyTagClose> | ( <StartTagClose> ( DirElemContent )* <EndTagOpen> <TagQName> ( <S> )? <EndTagClose> ) )
DirAttributeList ::= ( <S> ( <TagQName> ( <S> )? <ValueIndicator> ( <S> )? DirAttributeValue )? )*
DirAttributeValue ::= ( ( <OpenQuot> ( ( <EscapeQuot> | QuotAttrValueContent ) )* <CloseQuot> ) | ( <OpenApos> ( ( <EscapeApos> | AposAttrValueContent ) )* <CloseApos> ) )
QuotAttrValueContent ::= ( <QuotAttrContentChar> | CommonContent )
AposAttrValueContent ::= ( <AposAttrContentChar> | CommonContent )
DirElemContent ::= ( DirectConstructor | <ElementContentChar> | CDataSection | CommonContent )
CommonContent ::= ( <PredefinedEntityRef> | <CharRef> | <LCurlyBraceEscape> | <RCurlyBraceEscape> | EnclosedExpr )
DirCommentConstructor ::= ( <XmlCommentStartForElementContent> | <XmlCommentStart> ) DirCommentContents <XmlCommentEnd>
DirCommentContents ::= ( ( <CommentContentChar> | <CommentContentCharDash> ) )*
DirPIConstructor ::= ( <ProcessingInstructionStartForElementContent> | <ProcessingInstructionStart> ) <PITarget> ( <SForPI> DirPIContents )? <ProcessingInstructionEnd>
DirPIContents ::= ( <PIContentChar> )*
CDataSection ::= ( <CdataSectionStartForElementContent> | <CdataSectionStart> ) CDataSectionContents <CdataSectionEnd>
CDataSectionContents ::= ( <CDataSectionChar> )*
ComputedConstructor ::= ( CompDocConstructor | CompElemConstructor | CompAttrConstructor | CompTextConstructor | CompCommentConstructor | CompPIConstructor )
CompDocConstructor ::= <DocumentLbrace> Expr <Rbrace>
CompElemConstructor ::= ( <ElementQNameLbrace> | ( <ElementLbrace> Expr <Rbrace> <LbraceExprEnclosure> ) ) ( ContentExpr )? <Rbrace>
ContentExpr ::= Expr
CompAttrConstructor ::= ( <AttributeQNameLbrace> | ( <AttributeLbrace> Expr <Rbrace> <LbraceExprEnclosure> ) ) ( Expr )? <Rbrace>
CompTextConstructor ::= <TextLbrace> Expr <Rbrace>
CompCommentConstructor ::= <CommentLbrace> Expr <Rbrace>
CompPIConstructor ::= ( <PINCNameLbrace> | ( <PILbrace> Expr <Rbrace> <LbraceExprEnclosure> ) ) ( Expr )? <Rbrace>
SingleType ::= AtomicType ( <Optional> )?
TypeDeclaration ::= ( <As> | <AsForProlog> ) SequenceType
SequenceType ::= ( ( ItemType ( OccurrenceIndicator )? ) | <EmptySeqTok> )
OccurrenceIndicator ::= ( <OccurrenceZeroOrOne> | <OccurrenceZeroOrMore> | <OccurrenceOneOrMore> )
ItemType ::= ( AtomicType | KindTest | <Item> )
AtomicType ::= ( <QNameForSingleType> | <QNameForAtomicType> | <QNameForSequenceType> )
KindTest ::= ( DocumentTest | ElementTest | AttributeTest | SchemaElementTest | SchemaAttributeTest | PITest | CommentTest | TextTest | AnyKindTest )
AnyKindTest ::= ( <NodeLpar> | <NodeLparForKindTest> ) <RparForKindTest>
DocumentTest ::= ( <DocumentLpar> | <DocumentLparForKindTest> ) ( ( ElementTest | SchemaElementTest ) )? <RparForKindTest>
TextTest ::= ( <TextLpar> | <TextLparForKindTest> ) <RparForKindTest>
CommentTest ::= ( <CommentLpar> | <CommentLparForKindTest> ) <RparForKindTest>
PITest ::= ( <ProcessingInstructionLpar> | <ProcessingInstructionLparForKindTest> ) ( ( <NCNameForPI> | <StringLiteralForKindTest> ) )? <RparForKindTest>
AttributeTest ::= ( <AttributeType> | <AttributeTypeForKindTest> ) ( ( AttribNameOrWildcard ( <CommaForKindTest> TypeName )? ) )? <RparForKindTest>
AttribNameOrWildcard ::= ( AttributeName | <AnyName> )
SchemaAttributeTest ::= ( <SchemaAttributeType> | <SchemaAttributeTypeForKindTest> ) AttributeDeclaration <RparForKindTest>
AttributeDeclaration ::= AttributeName
ElementTest ::= ( <ElementType> | <ElementTypeForKindTest> | <ElementTypeForDocumentTest> ) ( ( ElementNameOrWildcard ( <CommaForKindTest> TypeName ( <Nillable> )? )? ) )? <RparForKindTest>
ElementNameOrWildcard ::= ( ElementName | <AnyName> )
SchemaElementTest ::= ( <SchemaElementType> | <SchemaElementTypeForKindTest> | <SchemaElementTypeForDocumentTest> ) ElementDeclaration <RparForKindTest>
ElementDeclaration ::= ElementName
AttributeName ::= <QNameForItemType>
ElementName ::= <QNameForItemType>
TypeName ::= <QNameForItemType>
FTSelection ::= FTOr ( ( FTMatchOption | FTProximity ) )* ( <FTWeightIndicator> <DecimalLiteral> )?
FTOrExpr ::= FTOr
FTOr ::= FTAnd ( <FTOrIndicator> FTAnd )*
FTAnd ::= FTMildnot ( <FTAndIndicator> FTMildnot )*
FTMildnot ::= FTUnaryNot ( <FTMildnotIndicator> FTUnaryNot )*
FTUnaryNot ::= ( <FTUnaryNotIndicator> )? FTWordsSelection
FTWordsSelection ::= ( FTWords | ( <Lpar> FTSelection <Rpar> ) )
FTWords ::= ( Literal | VarRef | ContextItemExpr | FunctionCall | ( <LbraceExprEnclosure> Expr <Rbrace> ) ) ( FTAnyallOption )?
FTProximity ::= ( <FTOrderedIndicator> | FTWindow | FTDistance | FTTimes | FTScope | FTContent )
FTMatchOption ::= ( FTCaseOption | FTDiacriticsOption | FTStemOption | FTThesaurusOption | FTStopwordOption | FTLanguageOption | FTWildCardOption )
FTCaseOption ::= ( <FTLowercaseIndicator> | <FTUppercaseIndicator> | <FTCasesensitiveIndicator> | <FTCaseinsensitiveIndicator> )
FTDiacriticsOption ::= ( <FTWithdiacriticsIndicator> | <FTWithoutdiacriticsIndicator> | <FTDiacriticsensitiveIndicator> | <FTDiacriticinsensitiveIndicator> )
FTStemOption ::= ( <FTWithstemIndicator> | <FTWithoutstemIndicator> )
FTThesaurusOption ::= ( ( <FTWithThesaurusIndicator> ( FTThesaurusID | <Default> ) ) | ( <FTWithThesaurusIndicatorGroup> ( FTThesaurusID | <Default> ) ( <Comma> FTThesaurusID )* <Rpar> ) | <FTWithoutThesaurusIndicator> )
FTThesaurusID ::= <FTAtStringLiteralIndicator> ( <FTRelationshipIndicator> )? ( FTRange <FTLevelsIndicator> )?
FTStopwordOption ::= ( ( <FTWithstopwordsIndicator> FTRefOrList ( FTInclExclStringLiteral )* ) | <FTWithoutstopwordsIndicator> | ( <FTWithDefaultstopwordsIndicator> ( FTInclExclStringLiteral )* ) )
FTRefOrList ::= ( <FTAtStringLiteralIndicator> | ( <Lpar> <StringLiteral> ( <Comma> <StringLiteral> )* <Rpar> ) )
FTInclExclStringLiteral ::= ( <Union> | <Except> ) FTRefOrList
FTLanguageOption ::= <FTLanguageIndicator> <StringLiteral>
FTWildCardOption ::= ( <FTWithWildcardIndicator> | <FTWithoutWildcardIndicator> )
FTContent ::= ( <FTStartIndicator> | <FTEndIndicator> | <FTEntireIndicator> )
FTAnyallOption ::= ( <FTAnyIndicator> | <FTAllIndicator> | <FTPhraseIndicator> | <FTAnywordIndicator> | <FTAllwordIndicator> )
FTRange ::= ( ( <FTExactlyIndicator> UnionExpr ) | ( <FTAtleastIndicator> UnionExpr ) | ( <FTAtmostIndicator> UnionExpr ) | ( <FTFromIndicator> UnionExpr <To> UnionExpr ) )
FTDistance ::= <FTDistanceIndicator> FTRange FTUnit
FTWindow ::= <FTWindowIndicator> UnionExpr FTUnit
FTTimes ::= <FTOccurrencesIndicator> FTRange <FTTimesIndicator>
FTScope ::= ( <FTSameIndicator> | <FTDifferentIndicator> ) FTBigUnit
FTUnit ::= ( <FTWordsIndicator> | <FTSentencesIndicator> | <FTParagraphsIndicator> )
FTBigUnit ::= ( <FTSentenceIndicator> | <FTParagraphIndicator> )
FTIgnoreOption ::= <FTIgnoreIndicator> UnionExpr