This project has retired. For details please refer to its Attic page.
BNF for xquery-grammar.jj

BNF for xquery-grammar.jj

TOKENS

<DEFAULT> TOKEN : {
<IntegerLiteral: <Digits>>
}

   
<DEFAULT> TOKEN : {
<DecimalLiteral: "." <Digits> | <Digits> "." (["0"-"9"])*>
}

   
<DEFAULT> TOKEN : {
<DoubleLiteral: ("." <Digits> | <Digits> ("." (["0"-"9"])*)?) ["e","E"] (["+","-"])? <Digits>>
}

   
<DEFAULT> TOKEN : {
<StringLiteral: "\"" (<PredefinedEntityRef> | <CharRef> | <EscapeQuot> | ~["\"","&"])* "\"" | "\'" (<PredefinedEntityRef> | <CharRef> | <EscapeApos> | ~["\'","&"])* "\'">
}

   
<FTPOSFILTER,FTMATCHOPTION,PROLOG_SPECIAL,PROLOG_NCNAME,DECLAREORDERING,DEFAULT,PROLOG,OPERAND,OPERATOR,KINDTEST,NAMESPACEDECL,SINGLETYPE,ITEMTYPE,NAMESPACEKEYWORD,VARNAME,OCCURRENCEINDICATOR,CLOSEKINDTEST,XQUERYVERSION,PRAGMA,OPTION,URITOOPERATOR> SKIP : {
<DUMMYLABEL: <skip_>>
}

   
<DEFAULT> TOKEN : {
<#skip_: (<WhitespaceChar>)+>
}

   
<DEFAULT> TOKEN : {
<Minus: "-">
}

   
<DEFAULT> TOKEN : {
<Plus: "+">
}

   
<DEFAULT> TOKEN : {
<External: "external">
}

   
<DEFAULT> TOKEN : {
<Ascending: "ascending">
}

   
<DEFAULT> TOKEN : {
<Descending: "descending">
}

   
<DEFAULT> TOKEN : {
<Greatest: "greatest">
}

   
<DEFAULT> TOKEN : {
<Least: "least">
}

   
<DEFAULT> TOKEN : {
<#Prefix: <NCNameTok>>
}

   
<DEFAULT> TOKEN : {
<#LocalPart: <NCNameTok>>
}

   
<DEFAULT> TOKEN : {
<#Nmstart: <Letter> | "_">
}

   
<DEFAULT> TOKEN : {
<#Nmchar: <Letter> | <CombiningChar> | <Extender> | <Digit> | "." | "-" | "_">
}

   
<DEFAULT,ELEMENT_CONTENT,QUOT_ATTRIBUTE_CONTENT,APOS_ATTRIBUTE_CONTENT> TOKEN : {
<PredefinedEntityRef: "&" ("lt" | "gt" | "amp" | "quot" | "apos") ";">
}

   
<QUOT_ATTRIBUTE_CONTENT> TOKEN : {
<EscapeQuot: "\"\""> : QUOT_ATTRIBUTE_CONTENT
}

   
<APOS_ATTRIBUTE_CONTENT> TOKEN : {
<EscapeApos: "\'\'"> : APOS_ATTRIBUTE_CONTENT
}

   
<DEFAULT> TOKEN : {
<#HexDigits: (["0"-"9","a"-"f","A"-"F"])+>
}

   
<ELEMENT_CONTENT,QUOT_ATTRIBUTE_CONTENT,APOS_ATTRIBUTE_CONTENT> TOKEN : {
<Lbrace: "{"> : DEFAULT
}

   
<DEFAULT> TOKEN : {
<LbraceExprEnclosure: "{"> : DEFAULT
}

   
<DEFAULT> TOKEN : {
<Rbrace: "}"> : {
}

   
<ELEMENT_CONTENT,QUOT_ATTRIBUTE_CONTENT,APOS_ATTRIBUTE_CONTENT> TOKEN : {
<RbraceErrorInContent: "}"> : DEFAULT
}

   
<ELEMENT_CONTENT,QUOT_ATTRIBUTE_CONTENT,APOS_ATTRIBUTE_CONTENT> TOKEN : {
<LCurlyBraceEscape: "{{">
}

   
<ELEMENT_CONTENT,QUOT_ATTRIBUTE_CONTENT,APOS_ATTRIBUTE_CONTENT> TOKEN : {
<RCurlyBraceEscape: "}}">
}

   
<ELEMENT_CONTENT,QUOT_ATTRIBUTE_CONTENT,APOS_ATTRIBUTE_CONTENT> TOKEN : {
<Amp: "&">
}

   
<DEFAULT> TOKEN : {
<LessThanOpOrTagO: "<"> : START_TAG
}

   
<ELEMENT_CONTENT> TOKEN : {
<StartTagOpen: "<"> : START_TAG
}

   
<QUOT_ATTRIBUTE_CONTENT,APOS_ATTRIBUTE_CONTENT> TOKEN : {
<AttrLTCharError: "<"> : DEFAULT
}

   
<START_TAG> TOKEN : {
<StartTagClose: ">"> : ELEMENT_CONTENT
}

   
<START_TAG> TOKEN : {
<OpenQuot: "\""> : QUOT_ATTRIBUTE_CONTENT
}

   
<QUOT_ATTRIBUTE_CONTENT> TOKEN : {
<CloseQuot: "\""> : START_TAG
}

   
<START_TAG> TOKEN : {
<OpenApos: "\'"> : APOS_ATTRIBUTE_CONTENT
}

   
<APOS_ATTRIBUTE_CONTENT> TOKEN : {
<CloseApos: "\'"> : START_TAG
}

   
<PRAGMACONTENTS> TOKEN : {
<ExtensionContentChar: <Char>>
}

   
<ELEMENT_CONTENT> TOKEN : {
<ElementContentChar: <Char>> : ELEMENT_CONTENT
}

   
<QUOT_ATTRIBUTE_CONTENT> TOKEN : {
<QuotAttrContentChar: <Char>> : QUOT_ATTRIBUTE_CONTENT
}

   
<APOS_ATTRIBUTE_CONTENT> TOKEN : {
<AposAttrContentChar: <Char>> : APOS_ATTRIBUTE_CONTENT
}

   
<XML_COMMENT> TOKEN : {
<CommentContentChar: <Char>> : XML_COMMENT
}

   
<START_TAG> TOKEN : {
<EmptyTagClose: "/>"> : {
}

   
<ELEMENT_CONTENT> TOKEN : {
<EndTagOpen: "</"> : END_TAG
}

   
<END_TAG> TOKEN : {
<EndTagClose: ">"> : {
}

   
<START_TAG> TOKEN : {
<ValueIndicator: "="> : START_TAG
}

   
<DEFAULT> TOKEN : {
<PragmaOpen: "(#"> : PRAGMA
}

   
<PRAGMACONTENTS,PRAGMACONTENTSSPACEDIVIDER> TOKEN : {
<PragmaClose: "#)"> : DEFAULT
}

   
<XML_COMMENT> TOKEN : {
<XMLCommentDoubleDashError: "-" "-"> : XML_COMMENT
}

   
<XML_COMMENT> TOKEN : {
<CommentContentCharDash: "-" <Char>> : XML_COMMENT
}

   
<DEFAULT> TOKEN : {
<ProcessingInstructionStart: "<?"> : PROCESSING_INSTRUCTION
}

   
<ELEMENT_CONTENT> TOKEN : {
<ProcessingInstructionStartForElementContent: "<?"> : PROCESSING_INSTRUCTION
}

   
<PROCESSING_INSTRUCTION,PROCESSING_INSTRUCTION_CONTENT> TOKEN : {
<ProcessingInstructionEnd: "?>"> : {
}

   
<PROCESSING_INSTRUCTION_CONTENT> TOKEN : {
<PIContentChar: ["\t","\r","\n"," "-"\ufffd"]> : PROCESSING_INSTRUCTION_CONTENT
}

   
<CDATA_SECTION> TOKEN : {
<CDataSectionChar: ["\t","\r","\n"," "-"\ufffd"]> : CDATA_SECTION
}

   
<DEFAULT> TOKEN : {
<CdataSectionStart: "<![CDATA["> : CDATA_SECTION
}

   
<ELEMENT_CONTENT> TOKEN : {
<CdataSectionStartForElementContent: "<![CDATA["> : CDATA_SECTION
}

   
<CDATA_SECTION> TOKEN : {
<CdataSectionEnd: "]" "]" ">"> : {
}

   
<DEFAULT> TOKEN : {
<XmlCommentStart: "<!--"> : XML_COMMENT
}

   
<ELEMENT_CONTENT> TOKEN : {
<XmlCommentStartForElementContent: "<!--"> : XML_COMMENT
}

   
<XML_COMMENT> TOKEN : {
<XmlCommentEnd: "-->"> : {
}

   
<DEFAULT> SPECIAL : {
<#Comment: <CommentStart> (<CommentContents>)* <CommentEnd>>
}

   
<DEFAULT,EXPR_COMMENT> SPECIAL : {
<CommentStart: "(:"> : EXPR_COMMENT
}

   
<EXPR_COMMENT> SPECIAL : {
<CommentContent: <Char>>
}

   
<EXPR_COMMENT> SPECIAL : {
<CommentEnd: ":)"> : {
}

   
<DEFAULT> TOKEN : {
<Slash: "/">
}

   
<DEFAULT> TOKEN : {
<SlashSlash: "//">
}

   
<PROCESSING_INSTRUCTION> TOKEN : {
<PITargetError: "xml" | "Xml" | "xMl" | "xmL" | "XMl" | "xML" | "xMl" | "XML" | "XmL"> : PROCESSING_INSTRUCTION
}

   
<PROCESSING_INSTRUCTION> TOKEN : {
<PITarget: <NCNameTok>> : PROCESSING_INSTRUCTION
}

   
<DEFAULT,ELEMENT_CONTENT,QUOT_ATTRIBUTE_CONTENT,APOS_ATTRIBUTE_CONTENT> TOKEN : {
<CharRef: "&#" (<Digits> | "x" <HexDigits>) ";">
}

   
<DEFAULT> TOKEN : {
<QNameToken: (<Prefix> ":")? <LocalPart>>
}

   
<PRAGMA> TOKEN : {
<QNameForPragma: <QNameToken>> : PRAGMACONTENTSSPACEDIVIDER
}

   
<START_TAG> TOKEN : {
<TagQName: <QNameToken>>
}

   
<END_TAG> TOKEN : {
<EndTagQName: <QNameToken>>
}

   
<DEFAULT> TOKEN : {
<#NCNameTok: <Nmstart> (<Nmchar>)*>
}

   
<DEFAULT> TOKEN : {
<NCNameColonStar: <NCNameTok> ":" "*">
}

   
<DEFAULT> TOKEN : {
<StarColonNCName: "*" ":" <NCNameTok>>
}

   
<DEFAULT,START_TAG,END_TAG> TOKEN : {
<S: (<WhitespaceChar>)+>
}

   
<PRAGMACONTENTSSPACEDIVIDER> TOKEN : {
<SForPragma: (<WhitespaceChar>)+> : PRAGMACONTENTS
}

   
<PROCESSING_INSTRUCTION> TOKEN : {
<SForPI: (<WhitespaceChar>)+> : PROCESSING_INSTRUCTION_CONTENT
}

   
<DEFAULT> TOKEN : {
<Char: ["\t","\r","\n"," "-"\ufffd"]>
}

   
<DEFAULT> TOKEN : {
<#Digits: (["0"-"9"])+>
}

   
<DEFAULT> SPECIAL : {
<#CommentContents: (<CommentContent>)+>
}

   
<DEFAULT> TOKEN : {
<#WhitespaceChar: ["\t","\r","\n"," "]>
}

   
<DEFAULT> TOKEN : {
<#Letter: <BaseChar> | <Ideographic>>
}

   
<DEFAULT> TOKEN : {
<#BaseChar: ["A"-"Z","a"-"z","\u00c0"-"\u00d6","\u00d8"-"\u00f6","\u00f8"-"\u00ff","\u0100"-"\u0131","\u0134"-"\u013e","\u0141"-"\u0148","\u014a"-"\u017e","\u0180"-"\u01c3","\u01cd"-"\u01f0","\u01f4"-"\u01f5","\u01fa"-"\u0217","\u0250"-"\u02a8","\u02bb"-"\u02c1","\u0386","\u0388"-"\u038a","\u038c","\u038e"-"\u03a1","\u03a3"-"\u03ce","\u03d0"-"\u03d6","\u03da","\u03dc","\u03de","\u03e0","\u03e2"-"\u03f3","\u0401"-"\u040c","\u040e"-"\u044f","\u0451"-"\u045c","\u045e"-"\u0481","\u0490"-"\u04c4","\u04c7"-"\u04c8","\u04cb"-"\u04cc","\u04d0"-"\u04eb","\u04ee"-"\u04f5","\u04f8"-"\u04f9","\u0531"-"\u0556","\u0559","\u0561"-"\u0586","\u05d0"-"\u05ea","\u05f0"-"\u05f2","\u0621"-"\u063a","\u0641"-"\u064a","\u0671"-"\u06b7","\u06ba"-"\u06be","\u06c0"-"\u06ce","\u06d0"-"\u06d3","\u06d5","\u06e5"-"\u06e6","\u0905"-"\u0939","\u093d","\u0958"-"\u0961","\u0985"-"\u098c","\u098f"-"\u0990","\u0993"-"\u09a8","\u09aa"-"\u09b0","\u09b2","\u09b6"-"\u09b9","\u09dc"-"\u09dd","\u09df"-"\u09e1","\u09f0"-"\u09f1","\u0a05"-"\u0a0a","\u0a0f"-"\u0a10","\u0a13"-"\u0a28","\u0a2a"-"\u0a30","\u0a32"-"\u0a33","\u0a35"-"\u0a36","\u0a38"-"\u0a39","\u0a59"-"\u0a5c","\u0a5e","\u0a72"-"\u0a74","\u0a85"-"\u0a8b","\u0a8d","\u0a8f"-"\u0a91","\u0a93"-"\u0aa8","\u0aaa"-"\u0ab0","\u0ab2"-"\u0ab3","\u0ab5"-"\u0ab9","\u0abd","\u0ae0","\u0b05"-"\u0b0c","\u0b0f"-"\u0b10","\u0b13"-"\u0b28","\u0b2a"-"\u0b30","\u0b32"-"\u0b33","\u0b36"-"\u0b39","\u0b3d","\u0b5c"-"\u0b5d","\u0b5f"-"\u0b61","\u0b85"-"\u0b8a","\u0b8e"-"\u0b90","\u0b92"-"\u0b95","\u0b99"-"\u0b9a","\u0b9c","\u0b9e"-"\u0b9f","\u0ba3"-"\u0ba4","\u0ba8"-"\u0baa","\u0bae"-"\u0bb5","\u0bb7"-"\u0bb9","\u0c05"-"\u0c0c","\u0c0e"-"\u0c10","\u0c12"-"\u0c28","\u0c2a"-"\u0c33","\u0c35"-"\u0c39","\u0c60"-"\u0c61","\u0c85"-"\u0c8c","\u0c8e"-"\u0c90","\u0c92"-"\u0ca8","\u0caa"-"\u0cb3","\u0cb5"-"\u0cb9","\u0cde","\u0ce0"-"\u0ce1","\u0d05"-"\u0d0c","\u0d0e"-"\u0d10","\u0d12"-"\u0d28","\u0d2a"-"\u0d39","\u0d60"-"\u0d61","\u0e01"-"\u0e2e","\u0e30","\u0e32"-"\u0e33","\u0e40"-"\u0e45","\u0e81"-"\u0e82","\u0e84","\u0e87"-"\u0e88","\u0e8a","\u0e8d","\u0e94"-"\u0e97","\u0e99"-"\u0e9f","\u0ea1"-"\u0ea3","\u0ea5","\u0ea7","\u0eaa"-"\u0eab","\u0ead"-"\u0eae","\u0eb0","\u0eb2"-"\u0eb3","\u0ebd","\u0ec0"-"\u0ec4","\u0f40"-"\u0f47","\u0f49"-"\u0f69","\u10a0"-"\u10c5","\u10d0"-"\u10f6","\u1100","\u1102"-"\u1103","\u1105"-"\u1107","\u1109","\u110b"-"\u110c","\u110e"-"\u1112","\u113c","\u113e","\u1140","\u114c","\u114e","\u1150","\u1154"-"\u1155","\u1159","\u115f"-"\u1161","\u1163","\u1165","\u1167","\u1169","\u116d"-"\u116e","\u1172"-"\u1173","\u1175","\u119e","\u11a8","\u11ab","\u11ae"-"\u11af","\u11b7"-"\u11b8","\u11ba","\u11bc"-"\u11c2","\u11eb","\u11f0","\u11f9","\u1e00"-"\u1e9b","\u1ea0"-"\u1ef9","\u1f00"-"\u1f15","\u1f18"-"\u1f1d","\u1f20"-"\u1f45","\u1f48"-"\u1f4d","\u1f50"-"\u1f57","\u1f59","\u1f5b","\u1f5d","\u1f5f"-"\u1f7d","\u1f80"-"\u1fb4","\u1fb6"-"\u1fbc","\u1fbe","\u1fc2"-"\u1fc4","\u1fc6"-"\u1fcc","\u1fd0"-"\u1fd3","\u1fd6"-"\u1fdb","\u1fe0"-"\u1fec","\u1ff2"-"\u1ff4","\u1ff6"-"\u1ffc","\u2126","\u212a"-"\u212b","\u212e","\u2180"-"\u2182","\u3041"-"\u3094","\u30a1"-"\u30fa","\u3105"-"\u312c","\uac00"-"\ud7a3"]>
}

   
<DEFAULT> TOKEN : {
<#Ideographic: ["\u4e00"-"\u9fa5","\u3007","\u3021"-"\u3029"]>
}

   
<DEFAULT> TOKEN : {
<#CombiningChar: ["\u0300"-"\u0345","\u0360"-"\u0361","\u0483"-"\u0486","\u0591"-"\u05a1","\u05a3"-"\u05b9","\u05bb"-"\u05bd","\u05bf","\u05c1"-"\u05c2","\u05c4","\u064b"-"\u0652","\u0670","\u06d6"-"\u06dc","\u06dd"-"\u06df","\u06e0"-"\u06e4","\u06e7"-"\u06e8","\u06ea"-"\u06ed","\u0901"-"\u0903","\u093c","\u093e"-"\u094c","\u094d","\u0951"-"\u0954","\u0962"-"\u0963","\u0981"-"\u0983","\u09bc","\u09be","\u09bf","\u09c0"-"\u09c4","\u09c7"-"\u09c8","\u09cb"-"\u09cd","\u09d7","\u09e2"-"\u09e3","\u0a02","\u0a3c","\u0a3e","\u0a3f","\u0a40"-"\u0a42","\u0a47"-"\u0a48","\u0a4b"-"\u0a4d","\u0a70"-"\u0a71","\u0a81"-"\u0a83","\u0abc","\u0abe"-"\u0ac5","\u0ac7"-"\u0ac9","\u0acb"-"\u0acd","\u0b01"-"\u0b03","\u0b3c","\u0b3e"-"\u0b43","\u0b47"-"\u0b48","\u0b4b"-"\u0b4d","\u0b56"-"\u0b57","\u0b82"-"\u0b83","\u0bbe"-"\u0bc2","\u0bc6"-"\u0bc8","\u0bca"-"\u0bcd","\u0bd7","\u0c01"-"\u0c03","\u0c3e"-"\u0c44","\u0c46"-"\u0c48","\u0c4a"-"\u0c4d","\u0c55"-"\u0c56","\u0c82"-"\u0c83","\u0cbe"-"\u0cc4","\u0cc6"-"\u0cc8","\u0cca"-"\u0ccd","\u0cd5"-"\u0cd6","\u0d02"-"\u0d03","\u0d3e"-"\u0d43","\u0d46"-"\u0d48","\u0d4a"-"\u0d4d","\u0d57","\u0e31","\u0e34"-"\u0e3a","\u0e47"-"\u0e4e","\u0eb1","\u0eb4"-"\u0eb9","\u0ebb"-"\u0ebc","\u0ec8"-"\u0ecd","\u0f18"-"\u0f19","\u0f35","\u0f37","\u0f39","\u0f3e","\u0f3f","\u0f71"-"\u0f84","\u0f86"-"\u0f8b","\u0f90"-"\u0f95","\u0f97","\u0f99"-"\u0fad","\u0fb1"-"\u0fb7","\u0fb9","\u20d0"-"\u20dc","\u20e1","\u302a"-"\u302f","\u3099","\u309a"]>
}

   
<DEFAULT> TOKEN : {
<#Digit: ["0"-"9","\u0660"-"\u0669","\u06f0"-"\u06f9","\u0966"-"\u096f","\u09e6"-"\u09ef","\u0a66"-"\u0a6f","\u0ae6"-"\u0aef","\u0b66"-"\u0b6f","\u0be7"-"\u0bef","\u0c66"-"\u0c6f","\u0ce6"-"\u0cef","\u0d66"-"\u0d6f","\u0e50"-"\u0e59","\u0ed0"-"\u0ed9","\u0f20"-"\u0f29"]>
}

   
<DEFAULT> TOKEN : {
<#Extender: ["\u00b7","\u02d0","\u02d1","\u0387","\u0640","\u0e46","\u0ec6","\u3005","\u3031"-"\u3035","\u309d"-"\u309e","\u30fc"-"\u30fe"]>
}

   
<DEFAULT> TOKEN : {
<NotNumber: ("." <Digits> | <Digits> ("." (["0"-"9"])*)?) (["e","E"] (["+","-"])? <Digits>)? ["a"-"z","A"-"Z"] (["0"-"9","a"-"z","A"-"Z"])*>
}

   

NON-TERMINALS

CUnit ::= Module <EOF>
Module ::= ( VersionDecl )? ( LibraryModule | MainModule )
VersionDecl ::= "xquery" "version" <StringLiteral> ( "encoding" <StringLiteral> )? Separator
MainModule ::= Prolog QueryBody
LibraryModule ::= ModuleDecl Prolog
ModuleDecl ::= "module" "namespace" NCName "=" URILiteral Separator
Prolog ::= ( ( DefaultNamespaceDecl | Setter | NamespaceDecl | Import ) Separator )* ( ( VarDecl | FunctionDecl | OptionDecl | FTOptionDecl ) Separator )*
Setter ::= ( BoundarySpaceDecl | DefaultCollationDecl | BaseURIDecl | ConstructionDecl | OrderingModeDecl | EmptyOrderDecl | CopyNamespacesDecl )
Import ::= ( SchemaImport | ModuleImport )
Separator ::= ";"
NamespaceDecl ::= "declare" "namespace" NCName "=" URILiteral
BoundarySpaceDecl ::= "declare" "boundary-space" ( "preserve" | "strip" )
DefaultNamespaceDecl ::= "declare" "default" ( "element" | "function" ) "namespace" URILiteral
OptionDecl ::= "declare" "option" QName <StringLiteral>
FTOptionDecl ::= "declare" "ft-option" FTMatchOptions
OrderingModeDecl ::= "declare" "ordering" ( "ordered" | "unordered" )
EmptyOrderDecl ::= "declare" "default" "order" "empty" ( <Greatest> | <Least> )
CopyNamespacesDecl ::= "declare" "copy-namespaces" PreserveMode "," InheritMode
PreserveMode ::= "preserve"
| "no-preserve"
InheritMode ::= "inherit"
| "no-inherit"
DefaultCollationDecl ::= "declare" "default" "collation" URILiteral
BaseURIDecl ::= "declare" "base-uri" URILiteral
SchemaImport ::= "import" "schema" ( SchemaPrefix )? URILiteral ( "at" URILiteral ( "," URILiteral )* )?
SchemaPrefix ::= ( ( "namespace" NCName "=" ) | ( "default" "element" "namespace" ) )
ModuleImport ::= "import" "module" ( "namespace" NCName "=" )? URILiteral ( "at" URILiteral ( "," URILiteral )* )?
VarDecl ::= "declare" "variable" "$" QName ( TypeDeclaration )? ( ( ":=" ExprSingle ) | <External> )
ConstructionDecl ::= "declare" "construction" ( "strip" | "preserve" )
FunctionDecl ::= "declare" "function" QName "(" ( ParamList )? ")" ( "as" SequenceType )? ( EnclosedExpr | <External> )
ParamList ::= Param ( "," Param )*
Param ::= "$" QName ( TypeDeclaration )?
EnclosedExpr ::= ( <Lbrace> | <LbraceExprEnclosure> ) Expr <Rbrace>
QueryBody ::= Expr
Expr ::= ExprSingle ( "," ExprSingle )*
ExprSingle ::= ( FLWORExpr | QuantifiedExpr | TypeswitchExpr | IfExpr | OrExpr )
FLWORExpr ::= ( ( ForClause | LetClause ) )+ ( WhereClause )? ( OrderByClause )? "return" ExprSingle
ForClause ::= "for" "$" VarName ( TypeDeclaration )? ( PositionalVar )? ( FTScoreVar )? "in" ExprSingle ( "," "$" VarName ( TypeDeclaration )? ( PositionalVar )? ( FTScoreVar )? "in" ExprSingle )*
PositionalVar ::= "at" "$" VarName
FTScoreVar ::= "score" "$" VarName
LetClause ::= ( ( "let" "$" VarName ( TypeDeclaration )? ) | ( "let" "score" "$" VarName ) ) ":=" ExprSingle ( "," ( ( "$" VarName ( TypeDeclaration )? ) | FTScoreVar ) ":=" ExprSingle )*
WhereClause ::= "where" ExprSingle
OrderByClause ::= ( ( "order" "by" ) | ( "stable" "order" "by" ) ) OrderSpecList
OrderSpecList ::= OrderSpec ( "," OrderSpec )*
OrderSpec ::= ExprSingle OrderModifier
OrderModifier ::= ( ( <Ascending> | <Descending> ) )? ( "empty" ( <Greatest> | <Least> ) )? ( "collation" URILiteral )?
QuantifiedExpr ::= ( "some" | "every" ) "$" VarName ( TypeDeclaration )? "in" ExprSingle ( "," "$" VarName ( TypeDeclaration )? "in" ExprSingle )* "satisfies" ExprSingle
TypeswitchExpr ::= "typeswitch" "(" Expr ")" ( CaseClause )+ "default" ( "$" VarName )? "return" ExprSingle
CaseClause ::= "case" ( "$" VarName "as" )? SequenceType "return" ExprSingle
IfExpr ::= "if" "(" Expr ")" "then" ExprSingle "else" ExprSingle
OrExpr ::= AndExpr ( "or" AndExpr )*
AndExpr ::= ComparisonExpr ( "and" ComparisonExpr )*
ComparisonExpr ::= FTContainsExpr ( ( ValueComp | GeneralComp | NodeComp ) FTContainsExpr )?
// TODO - Not yet implemented.
FTContainsExpr ::= RangeExpr ( "ftcontains" FTSelection ( FTIgnoreOption )? )?
RangeExpr ::= AdditiveExpr ( "to" AdditiveExpr )?
AdditiveExpr ::= MultiplicativeExpr ( ( <Plus> | <Minus> ) MultiplicativeExpr )*
MultiplicativeExpr ::= UnionExpr ( ( "*" | "div" | "idiv" | "mod" ) UnionExpr )*
UnionExpr ::= IntersectExceptExpr ( ( "union" | "|" ) 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 )?
UnaryExpr ::= ( <Minus> | <Plus> )* ValueExpr
ValueExpr ::= ( ValidateExpr | PathExpr | ExtensionExpr )
GeneralComp ::= ( "=" | "!=" | <LessThanOpOrTagO> | "<=" | ">" | ">=" )
ValueComp ::= ( "eq" | "ne" | "lt" | "le" | "gt" | "ge" )
NodeComp ::= ( "is" | "<<" | ">>" )
ValidateExpr ::= "validate" ( ValidationMode )? <LbraceExprEnclosure> Expr <Rbrace>
ValidationMode ::= ( "lax" | "strict" )
ExtensionExpr ::= ( Pragma )+ <LbraceExprEnclosure> ( Expr )? <Rbrace>
Pragma ::= <PragmaOpen> ( <S> )? <QNameForPragma> ( <SForPragma> PragmaContents )? <PragmaClose>
PragmaContents ::= ( <ExtensionContentChar> )*
PathExpr ::= ( <Slash> ( RelativePathExpr )? | <SlashSlash> RelativePathExpr | RelativePathExpr )
RelativePathExpr ::= StepExpr ( ( <Slash> | <SlashSlash> ) StepExpr )*
StepExpr ::= FilterExpr
| AxisStep
AxisStep ::= ( ReverseStep | ForwardStep ) PredicateList
ForwardStep ::= ForwardAxis NodeTest
| AbbrevForwardStep
ForwardAxis ::= ( "child" "::" | "descendant" "::" | "attribute" "::" | "self" "::" | "descendant-or-self" "::" | "following-sibling" "::" | "following" "::" )
AbbrevForwardStep ::= ( "@" )? NodeTest
ReverseStep ::= ReverseAxis NodeTest
| AbbrevReverseStep
ReverseAxis ::= ( "parent" "::" | "ancestor" "::" | "preceding-sibling" "::" | "preceding" "::" | "ancestor-or-self" "::" )
AbbrevReverseStep ::= ".."
NodeTest ::= ( KindTest | NameTest )
NameTest ::= ( QName | Wildcard )
Wildcard ::= ( "*" | <NCNameColonStar> | <StarColonNCName> )
FilterExpr ::= PrimaryExpr PredicateList
PredicateList ::= ( Predicate )*
Predicate ::= "[" Expr "]"
PrimaryExpr ::= ( Literal | VarRef | ParenthesizedExpr | ContextItemExpr | FunctionCall | OrderedExpr | UnorderedExpr | Constructor )
Literal ::= NumericLiteral
| <StringLiteral>
NumericLiteral ::= ( <IntegerLiteral> | <DecimalLiteral> | <DoubleLiteral> )
VarRef ::= "$" VarName
VarName ::= QName
ParenthesizedExpr ::= "(" ( Expr )? ")"
ContextItemExpr ::= "."
OrderedExpr ::= "ordered" <LbraceExprEnclosure> Expr <Rbrace>
UnorderedExpr ::= "unordered" <LbraceExprEnclosure> Expr <Rbrace>
FunctionCall ::= FunctionQName "(" ( ExprSingle ( "," ExprSingle )* )? ")"
Constructor ::= ( DirectConstructor | ComputedConstructor )
DirectConstructor ::= ( DirElemConstructor | DirCommentConstructor | DirPIConstructor )
DirElemConstructor ::= ( <LessThanOpOrTagO> | <StartTagOpen> ) <TagQName> DirAttributeList ( <EmptyTagClose> | ( <StartTagClose> ( ( EnclosedExpr | DirectConstructor | CDataSection ) | <PredefinedEntityRef> | <CharRef> | <LCurlyBraceEscape> | <RCurlyBraceEscape> | <ElementContentChar> )* <EndTagOpen> <EndTagQName> ( <S> )? <EndTagClose> ) )
DirAttributeList ::= ( <S> ( <TagQName> ( <S> )? <ValueIndicator> ( <S> )? DirAttributeValue )? )*
DirAttributeValue ::= ( ( <OpenQuot> ( <EscapeQuot> | <QuotAttrContentChar> | EnclosedExpr | <PredefinedEntityRef> | <CharRef> | <LCurlyBraceEscape> | <RCurlyBraceEscape> )* <CloseQuot> ) | ( <OpenApos> ( <EscapeApos> | <AposAttrContentChar> | EnclosedExpr | <PredefinedEntityRef> | <CharRef> | <LCurlyBraceEscape> | <RCurlyBraceEscape> )* <CloseApos> ) )
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 ::= "document" <LbraceExprEnclosure> Expr <Rbrace>
CompElemConstructor ::= "element" ( QName | ( <LbraceExprEnclosure> Expr <Rbrace> ) ) <LbraceExprEnclosure> ( ContentExpr )? <Rbrace>
ContentExpr ::= Expr
CompAttrConstructor ::= "attribute" ( QName | ( <LbraceExprEnclosure> Expr <Rbrace> ) ) <LbraceExprEnclosure> ( Expr )? <Rbrace>
CompTextConstructor ::= "text" <LbraceExprEnclosure> Expr <Rbrace>
CompCommentConstructor ::= "comment" <LbraceExprEnclosure> Expr <Rbrace>
CompPIConstructor ::= "processing-instruction" ( NCName | ( <LbraceExprEnclosure> Expr <Rbrace> ) ) <LbraceExprEnclosure> ( Expr )? <Rbrace>
SingleType ::= AtomicType ( "?" )?
TypeDeclaration ::= "as" SequenceType
SequenceType ::= ( ( "empty-sequence" "(" ")" ) | ( ItemType ( OccurrenceIndicator )? ) )
OccurrenceIndicator ::= ( "?" | "*" | <Plus> )
ItemType ::= ( KindTest | ( "item" "(" ")" ) | AtomicType )
AtomicType ::= QName
KindTest ::= ( DocumentTest | ElementTest | AttributeTest | SchemaElementTest | SchemaAttributeTest | PITest | CommentTest | TextTest | AnyKindTest )
AnyKindTest ::= "node" "(" ")"
DocumentTest ::= "document-node" "(" ( ( ElementTest | SchemaElementTest ) )? ")"
TextTest ::= "text" "(" ")"
CommentTest ::= "comment" "(" ")"
PITest ::= "processing-instruction" "(" ( ( NCName | <StringLiteral> ) )? ")"
AttributeTest ::= "attribute" "(" ( ( AttribNameOrWildcard ( "," TypeName )? ) )? ")"
AttribNameOrWildcard ::= ( AttributeName | "*" )
SchemaAttributeTest ::= "schema-attribute" "(" AttributeDeclaration ")"
AttributeDeclaration ::= AttributeName
ElementTest ::= "element" "(" ( ( ElementNameOrWildcard ( "," TypeName ( "?" )? )? ) )? ")"
ElementNameOrWildcard ::= ( ElementName | "*" )
SchemaElementTest ::= "schema-element" "(" ElementDeclaration ")"
ElementDeclaration ::= ElementName
AttributeName ::= QName
ElementName ::= QName
TypeName ::= QName
URILiteral ::= <StringLiteral>
FTSelection ::= FTOr ( FTPosFilter )* ( "weight" RangeExpr )?
FTOrExpr ::= FTOr
FTOr ::= FTAnd ( "ftor" FTAnd )*
FTAnd ::= FTMildNot ( "ftand" FTMildNot )*
FTMildNot ::= FTUnaryNot ( ( "not" "in" ) FTUnaryNot )*
FTUnaryNot ::= ( "ftnot" )? FTPrimaryWithOptions
FTPrimaryWithOptions ::= ( FTPrimary ( FTMatchOptions )? )
FTPrimary ::= ( ( FTWords ( FTTimes )? ) | ( "(" FTSelection ")" ) | FTExtensionSelection )
FTWords ::= FTWordsValue ( FTAnyallOption )?
FTWordsValue ::= ( Literal | ( <LbraceExprEnclosure> Expr <Rbrace> ) )
FTExtensionSelection ::= ( Pragma )+ <LbraceExprEnclosure> ( FTSelection )? <Rbrace>
FTAnyallOption ::= ( ( "any" ( "word" )? ) | ( "all" ( "words" )? ) | "phrase" )
FTTimes ::= "occurs" FTRange "times"
FTRange ::= ( ( "exactly" AdditiveExpr ) | ( "at" <Least> AdditiveExpr ) | ( "at" "most" AdditiveExpr ) | ( "from" AdditiveExpr "to" AdditiveExpr ) )
FTPosFilter ::= ( FTOrder | FTWindow | FTDistance | FTScope | FTContent )
FTOrder ::= "ordered"
FTWindow ::= "window" AdditiveExpr FTUnit
FTDistance ::= "distance" FTRange FTUnit
FTUnit ::= ( "words" | "sentences" | "paragraphs" )
FTScope ::= ( "same" | "different" ) FTBigUnit
FTBigUnit ::= ( "sentence" | "paragraph" )
FTContent ::= ( ( "at" "start" ) | ( "at" "end" ) | ( "entire" "content" ) )
FTMatchOptions ::= ( FTMatchOption )+
FTMatchOption ::= FTLanguageOption
| FTWildCardOption
| FTThesaurusOption
| FTStemOption
| FTCaseOption
| FTDiacriticsOption
| FTStopwordOption
| FTExtensionOption
FTCaseOption ::= ( ( "case" "insensitive" ) | ( "case" "sensitive" ) | "lowercase" | "uppercase" )
FTDiacriticsOption ::= ( ( "diacritics" "insensitive" ) | ( "diacritics" "sensitive" ) )
FTStemOption ::= ( ( "with" "stemming" ) | ( "without" "stemming" ) )
FTThesaurusOption ::= ( ( "with" "thesaurus" ( FTThesaurusID | "default" ) ) | ( "with" "thesaurus" "(" ( FTThesaurusID | "default" ) ( "," FTThesaurusID )* ")" ) | ( "without" "thesaurus" ) )
FTThesaurusID ::= "at" URILiteral ( "relationship" <StringLiteral> )? ( FTRange "levels" )?
FTStopwordOption ::= ( ( "with" "stop" "words" FTRefOrList ( FTInclExclStringLiteral )* ) | ( "without" "stop" "words" ) | ( "with" "default" "stop" "words" ( FTInclExclStringLiteral )* ) )
FTRefOrList ::= ( ( "at" URILiteral ) | ( "(" <StringLiteral> ( "," <StringLiteral> )* ")" ) )
FTInclExclStringLiteral ::= ( "union" | "except" ) FTRefOrList
FTLanguageOption ::= "language" <StringLiteral>
FTWildCardOption ::= ( ( "with" "wildcards" ) | ( "without" "wildcards" ) )
FTExtensionOption ::= "option" QName <StringLiteral>
FTIgnoreOption ::= "without" "content" UnionExpr
NCName ::= QName
QName ::= FunctionQName
| "attribute"
| "comment"
| "document-node"
| "element"
| "if"
| "item"
| "node"
| "processing-instruction"
| "schema-attribute"
| "schema-element"
| "text"
| "typeswitch"
| "empty-sequence"
FunctionQName ::= <QNameToken>
| <External>
| "xquery"
| "version"
| "encoding"
| "module"
| "namespace"
| "declare"
| "boundary-space"
| "preserve"
| "strip"
| "default"
| "function"
| "option"
| "ft-option"
| "ordering"
| "ordered"
| "unordered"
| "order"
| "empty"
| <Greatest>
| <Least>
| "copy-namespaces"
| "no-preserve"
| "inherit"
| "no-inherit"
| "collation"
| "base-uri"
| "import"
| "schema"
| "at"
| "variable"
| "construction"
| "as"
| "lax"
| "strict"
| "return"
| "for"
| "in"
| "score"
| "let"
| "where"
| "by"
| "stable"
| <Ascending>
| <Descending>
| "some"
| "every"
| "satisfies"
| "case"
| "then"
| "else"
| "or"
| "and"
| "ftcontains"
| "to"
| "div"
| "idiv"
| "mod"
| "union"
| "intersect"
| "except"
| "instance"
| "of"
| "treat"
| "castable"
| "cast"
| "eq"
| "ne"
| "lt"
| "le"
| "gt"
| "ge"
| "is"
| "validate"
| "child"
| "descendant"
| "self"
| "descendant-or-self"
| "following-sibling"
| "following"
| "parent"
| "ancestor"
| "preceding-sibling"
| "preceding"
| "ancestor-or-self"
| "document"
| "weight"
| "not"
| "lowercase"
| "uppercase"
| "sensitive"
| "insensitive"
| "with"
| "diacritics"
| "without"
| "stemming"
| "thesaurus"
| "relationship"
| "levels"
| "stop"
| "words"
| "language"
| "wildcards"
| "start"
| "end"
| "entire"
| "content"
| "any"
| "all"
| "phrase"
| "word"
| "exactly"
| "most"
| "from"
| "distance"
| "window"
| "occurs"
| "times"
| "same"
| "different"
| "sentences"
| "paragraphs"
| "sentence"
| "paragraph"
| "type"