| 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> )? |