BNF for xpath-grammar.jj

NON-TERMINALS

XPath2 ::= QueryList <EOF>
QueryList ::= Query ( <SemiColon> Query )*
Query ::= QueryProlog QueryBody
QueryProlog ::= ( ( NamespaceDecl | XMLSpaceDecl | DefaultNamespaceDecl | DefaultCollationDecl | SchemaImport ) )* ( FunctionDefn )*
QueryBody ::= ( ExprSequence )?
ExprSequence ::= Expr ( <Comma> Expr )*
Expr ::= SortExpr
SortExpr ::= OrExpr ( ( <Stable> )? <SortbyLpar> SortSpecList <Rpar> )*
OrExpr ::= AndExpr ( <Or> AndExpr )*
AndExpr ::= UnorderedExpr ( <And> UnorderedExpr )*
UnorderedExpr ::= ( <Unordered> )? FLWRExpr
FLWRExpr ::= ( ( ( ForClause | LetClause ) )+ ( WhereClause )? <Return> )* QuantifiedExpr
QuantifiedExpr ::= ( ( <Some> | <Every> ) ( TypeDeclaration )? <VariableIndicator> <VarName> <In> Expr ( <Comma> ( ( TypeDeclaration )? <VariableIndicator> <VarName> ) <In> Expr )* <Satisfies> )* TypeswitchExpr
TypeswitchExpr ::= ( <TypeswitchLpar> Expr <Rpar> ( CaseClause )+ <Default> ( <VariableIndicator> <VarName> )? <Return> )* IfExpr
IfExpr ::= ( <IfLpar> Expr <Rpar> <Then> Expr <Else> )* InstanceofExpr
InstanceofExpr ::= ComparisonExpr ( <Instanceof> SequenceType )?
ComparisonExpr ::= RangeExpr ( ( ValueComp | GeneralComp | NodeComp | OrderComp ) RangeExpr )?
RangeExpr ::= AdditiveExpr ( <To> AdditiveExpr )*
AdditiveExpr ::= MultiplicativeExpr ( ( <Plus> | <Minus> ) MultiplicativeExpr )*
MultiplicativeExpr ::= UnionExpr ( ( <Multiply> | <Div> | <Idiv> | <Mod> ) UnionExpr )*
UnionExpr ::= IntersectExceptExpr ( ( <Union> | <Vbar> ) IntersectExceptExpr )*
IntersectExceptExpr ::= UnaryExpr ( ( <Intersect> | <Except> ) UnaryExpr )*
UnaryExpr ::= ( <Minus> | <Plus> )* ValueExpr
ValueExpr ::= ( ValidateExpr | CastExpr | Constructor | PathExpr )
PathExpr ::= ( ( <Root> ( RelativePathExpr )? ) | ( <RootDescendants> RelativePathExpr ) | RelativePathExpr )
RelativePathExpr ::= StepExpr ( ( <Slash> | <SlashSlash> ) StepExpr )*
StepExpr ::= ( ForwardStep | ReverseStep | PrimaryExpr ) Predicates
ForClause ::= <ForVariable> ( TypeDeclaration )? <VariableIndicator> <VarName> <In> Expr ( <Comma> ( ( TypeDeclaration )? <VariableIndicator> <VarName> ) <In> Expr )*
LetClause ::= <LetVariable> ( TypeDeclaration )? <VariableIndicator> <VarName> <ColonEquals> Expr ( <Comma> ( ( TypeDeclaration )? <VariableIndicator> <VarName> ) <ColonEquals> Expr )*
WhereClause ::= <Where> Expr
ValidateExpr ::= <Validate> ( SchemaContext )? <LbraceExprEnclosure> Expr <Rbrace>
CastExpr ::= ( <CastAs> | <TreatAs> ) SequenceType ParenthesizedExpr
Constructor ::= ( ElementConstructor | XmlComment | XmlProcessingInstruction | CdataSection | ComputedDocumentConstructor | ComputedElementConstructor | ComputedAttributeConstructor )
GeneralComp ::= ( <Equals> | <NotEquals> | <Lt> | <LtEquals> | <Gt> | <GtEquals> )
ValueComp ::= ( <FortranEq> | <FortranNe> | <FortranLt> | <FortranLe> | <FortranGt> | <FortranGe> )
NodeComp ::= ( <Is> | <IsNot> )
OrderComp ::= ( <LtLt> | <GtGt> )
SortSpecList ::= Expr SortModifier ( <Comma> SortSpecList )?
SortModifier ::= ( ( <Ascending> | <Descending> ) )? ( ( <EmptyGreatest> | <EmptyLeast> ) )?
CaseClause ::= <Case> SequenceType ( <VariableIndicator> <VarName> )? <Return> Expr
PrimaryExpr ::= ( Literal | FunctionCall | ( <VariableIndicator> <VarName> ) | ParenthesizedExpr )
ForwardAxis ::= ( <AxisChild> | <AxisDescendant> | <AxisAttribute> | <AxisSelf> | <AxisDescendantOrSelf> )
ReverseAxis ::= ( <AxisParent> )
NodeTest ::= ( KindTest | NameTest )
NameTest ::= ( <QName> | Wildcard )
Wildcard ::= ( <Star> | <NCNameColonStar> | <StarColonNCName> )
KindTest ::= ( ProcessingInstructionTest | CommentTest | TextTest | AnyKindTest )
ProcessingInstructionTest ::= <ProcessingInstructionLpar> ( <StringLiteral> )? <Rpar>
CommentTest ::= <CommentLpar> <Rpar>
TextTest ::= <TextLpar> <Rpar>
AnyKindTest ::= <NodeLpar> <Rpar>
ForwardStep ::= ( ( ForwardAxis ( NodeTest ) ) | AbbreviatedForwardStep )
ReverseStep ::= ( ( ReverseAxis ( NodeTest ) ) | AbbreviatedReverseStep )
AbbreviatedForwardStep ::= ( <Dot> | ( <At> NameTest ) | NodeTest )
AbbreviatedReverseStep ::= <DotDot>
Predicates ::= ( ( ( <Lbrack> Expr <Rbrack> ) ) )*
NumericLiteral ::= ( <IntegerLiteral> | <DecimalLiteral> | <DoubleLiteral> )
Literal ::= ( NumericLiteral | <StringLiteral> )
ParenthesizedExpr ::= <Lpar> ( ExprSequence )? <Rpar>
FunctionCall ::= <QNameLpar> ( Expr ( <Comma> Expr )* )? <Rpar>
Param ::= ( SequenceType )? <VariableIndicator> <VarName>
SchemaContext ::= <In> SchemaGlobalContext ( <Slash> SchemaContextStep )*
SchemaGlobalContext ::= ( <QName> | <TypeQName> )
SchemaContextStep ::= <QName>
TypeDeclaration ::= SequenceType
SequenceType ::= ( ( ItemType OccurrenceIndicator ) | <Empty> )
ItemType ::= ( ( ( <ElementType> | <AttributeType> ) ( ElemOrAttrType )? ) | <Node> | <ProcessingInstruction> | <Comment> | <Text> | ( <Document> ) | <Item> | AtomicType | <Untyped> | <AtomicValue> )
ElemOrAttrType ::= ( ( <QName> ( SchemaType | ( SchemaContext )? ) ) | SchemaType )
SchemaType ::= <OfType> <QName>
AtomicType ::= <QName>
OccurrenceIndicator ::= ( ( <Star> | <Multiply> | <Plus> | <QMark> ) )?
ElementConstructor ::= ( <StartTagOpenRoot> | <StartTagOpen> ) <TagQName> AttributeList ( <EmptyTagClose> | ( <StartTagClose> ( ElementContent )* <EndTagOpen> <TagQName> ( <S> )? <EndTagClose> ) )
ComputedDocumentConstructor ::= ( <DocumentLbrace> ExprSequence <Rbrace> )
ComputedElementConstructor ::= ( <ElementQNameLbrace> | ( <ElementLbrace> Expr <Rbrace> <LbraceExprEnclosure> ) ) ( ExprSequence )? <Rbrace>
ComputedAttributeConstructor ::= ( <AttributeQNameLbrace> | ( <AttributeLbrace> Expr <Rbrace> <LbraceExprEnclosure> ) ) ( ExprSequence )? <Rbrace>
CdataSection ::= <CdataSectionStart> ( <Char> )* <CdataSectionEnd>
XmlProcessingInstruction ::= <ProcessingInstructionStart> <PITarget> ( <Char> )* <ProcessingInstructionEnd>
XmlComment ::= <XmlCommentStart> ( <Char> )* <XmlCommentEnd>
ElementContent ::= ( <Char> | <LCurlyBraceEscape> | <RCurlyBraceEscape> | ElementConstructor | EnclosedExpr | CdataSection | <CharRef> | <PredefinedEntityRef> | XmlComment | XmlProcessingInstruction )
AttributeList ::= ( <S> ( <TagQName> ( <S> )? <ValueIndicator> ( <S> )? AttributeValue )? )*
AttributeValue ::= ( ( <OpenQuot> ( ( <EscapeQuot> | AttributeValueContent ) )* <CloseQuot> ) | ( <OpenApos> ( ( <EscapeApos> | AttributeValueContent ) )* <CloseApos> ) )
AttributeValueContent ::= ( <Char> | <CharRef> | <LCurlyBraceEscape> | <RCurlyBraceEscape> | EnclosedExpr | <PredefinedEntityRef> )
EnclosedExpr ::= ( <Lbrace> | <LbraceExprEnclosure> ) ExprSequence <Rbrace>
XMLSpaceDecl ::= <DeclareXMLSpace> <XMLSpaceEquals> ( <XMLSpacePreserve> | <XMLSpaceStrip> )
DefaultCollationDecl ::= <DefaultCollationEquals> <URLLiteral>
NamespaceDecl ::= <DeclareNamespace> <NCNameForPrefix> <AssignEquals> <URLLiteral>
SubNamespaceDecl ::= <Namespace> <NCNameForPrefix> <AssignEquals> <URLLiteral>
DefaultNamespaceDecl ::= ( <DefaultElement> | <DefaultFunction> ) <Namespace> <AssignEquals> <URLLiteral>
FunctionDefn ::= <DefineFunction> <FuncName> <FuncPListOpen> ( ParamList )? ( <Rpar> | ( <RparReturns> SequenceType ) ) EnclosedExpr
ParamList ::= Param ( <Comma> Param )*
SchemaImport ::= <ImportSchemaToken> ( <StringLiteral> | SubNamespaceDecl | DefaultNamespaceDecl ) ( <AtStringLiteral> )?