| <!-- |
| ! Copyright 2009-2013 by The Regents of the University of California |
| ! Licensed under the Apache License, Version 2.0 (the "License"); |
| ! you may not use this file except in compliance with the License. |
| ! you may obtain a copy of the License from |
| ! |
| ! http://www.apache.org/licenses/LICENSE-2.0 |
| ! |
| ! Unless required by applicable law or agreed to in writing, software |
| ! distributed under the License is distributed on an "AS IS" BASIS, |
| ! WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| ! See the License for the specific language governing permissions and |
| ! limitations under the License. |
| !--> |
| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> |
| <HTML> |
| <HEAD> |
| <TITLE>BNF for AQL.jj</TITLE> |
| </HEAD> |
| <BODY> |
| <H1 ALIGN=CENTER>BNF for AQL.jj</H1> |
| <H2 ALIGN=CENTER>TOKENS</H2> |
| <TABLE> |
| <!-- Token --> |
| <TR> |
| <TD> |
| <PRE> |
| <DEFAULT> TOKEN : { |
| <CARET: "^"> |
| } |
| |
| </PRE> |
| </TD> |
| </TR> |
| <!-- Token --> |
| <TR> |
| <TD> |
| <PRE> |
| <DEFAULT> TOKEN : { |
| <DATASET: "dataset"> |
| } |
| |
| </PRE> |
| </TD> |
| </TR> |
| <!-- Token --> |
| <TR> |
| <TD> |
| <PRE> |
| <DEFAULT> TOKEN : { |
| <LEFTPAREN: "("> |
| } |
| |
| </PRE> |
| </TD> |
| </TR> |
| <!-- Token --> |
| <TR> |
| <TD> |
| <PRE> |
| <DEFAULT> TOKEN : { |
| <RIGHTPAREN: ")"> |
| } |
| |
| </PRE> |
| </TD> |
| </TR> |
| <!-- Token --> |
| <TR> |
| <TD> |
| <PRE> |
| <DEFAULT> TOKEN : { |
| <INTEGER_LITERAL: (<DIGIT>)+> |
| } |
| |
| </PRE> |
| </TD> |
| </TR> |
| <!-- Token --> |
| <TR> |
| <TD> |
| <PRE> |
| <DEFAULT> TOKEN : { |
| <NULL: "null"> |
| } |
| |
| </PRE> |
| </TD> |
| </TR> |
| <!-- Token --> |
| <TR> |
| <TD> |
| <PRE> |
| <DEFAULT> TOKEN : { |
| <TRUE: "true"> |
| } |
| |
| </PRE> |
| </TD> |
| </TR> |
| <!-- Token --> |
| <TR> |
| <TD> |
| <PRE> |
| <DEFAULT> TOKEN : { |
| <FALSE: "false"> |
| } |
| |
| </PRE> |
| </TD> |
| </TR> |
| <!-- Token --> |
| <TR> |
| <TD> |
| <PRE> |
| <DEFAULT> TOKEN : { |
| <#DIGIT: ["0"-"9"]> |
| } |
| |
| </PRE> |
| </TD> |
| </TR> |
| <!-- Token --> |
| <TR> |
| <TD> |
| <PRE> |
| <DEFAULT> TOKEN : { |
| <DOUBLE_LITERAL: <INTEGER> | <INTEGER> ("." <INTEGER>)? | "." <INTEGER>> |
| | <FLOAT_LITERAL: <INTEGER> ("f" | "F") | <INTEGER> ("." <INTEGER> ("f" | "F"))? | "." <INTEGER> ("f" | "F")> |
| | <INTEGER: (<DIGIT>)+> |
| } |
| |
| </PRE> |
| </TD> |
| </TR> |
| <!-- Token --> |
| <TR> |
| <TD> |
| <PRE> |
| <DEFAULT> TOKEN : { |
| <#LETTER: ["A"-"Z","a"-"z"]> |
| } |
| |
| </PRE> |
| </TD> |
| </TR> |
| <!-- Token --> |
| <TR> |
| <TD> |
| <PRE> |
| <DEFAULT> TOKEN : { |
| <SPECIALCHARS: ["$","_","-"]> |
| } |
| |
| </PRE> |
| </TD> |
| </TR> |
| <!-- Token --> |
| <TR> |
| <TD> |
| <PRE> |
| <DEFAULT> TOKEN : { |
| <STRING_LITERAL: "\"" (<EscapeQuot> | ~["\""])* "\"" | "\'" (<EscapeApos> | ~["\'"])* "\'"> |
| | <#EscapeQuot: "\\\""> |
| | <#EscapeApos: "\\\'"> |
| } |
| |
| </PRE> |
| </TD> |
| </TR> |
| <!-- Token --> |
| <TR> |
| <TD> |
| <PRE> |
| <DEFAULT> TOKEN : { |
| <IDENTIFIER: (<LETTER>)+ (<LETTER> | <DIGIT> | <SPECIALCHARS>)*> |
| } |
| |
| </PRE> |
| </TD> |
| </TR> |
| <!-- Token --> |
| <TR> |
| <TD> |
| <PRE> |
| <DEFAULT> TOKEN : { |
| <VARIABLE: "$" <IDENTIFIER>> |
| } |
| |
| </PRE> |
| </TD> |
| </TR> |
| <!-- Token --> |
| <TR> |
| <TD> |
| <PRE> |
| <DEFAULT> SKIP : { |
| " " |
| | "\t" |
| | "\r" |
| | "\n" |
| } |
| |
| </PRE> |
| </TD> |
| </TR> |
| <!-- Token --> |
| <TR> |
| <TD> |
| <PRE> |
| <DEFAULT> SKIP : { |
| <"//" (~["\n"])* "\n"> |
| } |
| |
| </PRE> |
| </TD> |
| </TR> |
| <!-- Token --> |
| <TR> |
| <TD> |
| <PRE> |
| <DEFAULT> SKIP : { |
| <"//" (~["\n","\r"])* ("\n" | "\r" | "\r\n")?> |
| } |
| |
| </PRE> |
| </TD> |
| </TR> |
| <!-- Token --> |
| <TR> |
| <TD> |
| <PRE> |
| <DEFAULT> SKIP : { |
| "/*" : INSIDE_COMMENT |
| } |
| |
| </PRE> |
| </TD> |
| </TR> |
| <!-- Token --> |
| <TR> |
| <TD> |
| <PRE> |
| <INSIDE_COMMENT> SPECIAL : { |
| <"+" (" ")* (~["*"])*> |
| } |
| |
| </PRE> |
| </TD> |
| </TR> |
| <!-- Token --> |
| <TR> |
| <TD> |
| <PRE> |
| <INSIDE_COMMENT> SKIP : { |
| "/*" : { |
| } |
| |
| </PRE> |
| </TD> |
| </TR> |
| <!-- Token --> |
| <TR> |
| <TD> |
| <PRE> |
| <INSIDE_COMMENT> SKIP : { |
| "*/" : { |
| | <~[]> |
| } |
| |
| </PRE> |
| </TD> |
| </TR> |
| </TABLE> |
| <H2 ALIGN=CENTER>NON-TERMINALS</H2> |
| <TABLE> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod1">Statement</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE>( ( ( "use" | "declare" "function" | "create" ( "type" | "nodegroup" | "external" <DATASET> | <DATASET> | "index" | "dataverse" ) | "load" | "enlist" | "drop" ( <DATASET> | "index" | "nodegroup" | "type" | "dataverse" ) | "write" | "set" | "insert" | "delete" | "update" )* ( <A HREF="#prod2">Query</A> )? ) <EOF> )</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod3">InsertStatement</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE>"into" <DATASET> <IDENTIFIER> <LEFTPAREN> <A HREF="#prod2">Query</A> <RIGHTPAREN> ";"</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod4">DeleteStatement</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod5">Variable</A> "from" <DATASET> <IDENTIFIER> ( "where" <A HREF="#prod6">Expression</A> )? ";"</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod7">UpdateStatement</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod5">Variable</A> "in" <A HREF="#prod6">Expression</A> "where" <A HREF="#prod6">Expression</A> <LEFTPAREN> ( <A HREF="#prod8">UpdateClause</A> ( "," <A HREF="#prod8">UpdateClause</A> )* ) <RIGHTPAREN> ";"</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod8">UpdateClause</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE>"set" <A HREF="#prod6">Expression</A> ":=" <A HREF="#prod6">Expression</A></TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>|</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE>"insert" <A HREF="#prod3">InsertStatement</A></TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>|</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE>"delete" <A HREF="#prod4">DeleteStatement</A></TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>|</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE>"update" <A HREF="#prod7">UpdateStatement</A></TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>|</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE>"if" <LEFTPAREN> <A HREF="#prod6">Expression</A> <RIGHTPAREN> "then" <A HREF="#prod8">UpdateClause</A> ( "else" <A HREF="#prod8">UpdateClause</A> )?</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod9">SetStatement</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE><IDENTIFIER> <STRING_LITERAL> ";"</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod10">WriteStatement</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE>( ( "output" "to" <IDENTIFIER> ":" <STRING_LITERAL> ( "using" <STRING_LITERAL> )? ) | ( "into" <DATASET> <IDENTIFIER> <LEFTPAREN> <A HREF="#prod2">Query</A> <RIGHTPAREN> ) ) ";"</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod11">CreateIndexStatement</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE><IDENTIFIER> ( "if not exists" )? "on" <IDENTIFIER> <LEFTPAREN> ( <IDENTIFIER> ) ( "," <IDENTIFIER> )* <RIGHTPAREN> ( "type" ( "btree" | "keyword" | "qgram" | "rtree" ) ";" | ";" )</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod12">DataverseDeclaration</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE>"dataverse" <IDENTIFIER> ";"</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod13">DropStatement</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE><IDENTIFIER> ( "if exists" )? ";"</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod14">IndexDropStatement</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE><IDENTIFIER> "." <IDENTIFIER> ( "if exists" )? ";"</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod15">NodeGroupDropStatement</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE><IDENTIFIER> ( "if exists" )? ";"</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod16">TypeDropStatement</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE><IDENTIFIER> ( "if exists" )? ";"</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod17">DataverseDropStatement</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE><IDENTIFIER> ( "if exists" )? ";"</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod18">CreateDataverseStatement</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE><IDENTIFIER> ( "if not exists" )? ( "with format" <STRING_LITERAL> )? ";"</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod19">LoadStatement</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE><DATASET> <IDENTIFIER> "from" ( <IDENTIFIER> ":" <STRING_LITERAL> ) ( "," <IDENTIFIER> ":" <STRING_LITERAL> )* ( "delimited" "by" <STRING_LITERAL> )? ( "pre-sorted" )? ";"</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod20">EnlistStatement</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE><DATASET> <IDENTIFIER> ";"</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod21">DatasetDeclaration</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE><IDENTIFIER> ( "if not exists" )? ( <LEFTPAREN> <IDENTIFIER> <RIGHTPAREN> )?</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod22">InternalDatasetDeclaration</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE>"partitioned" "by" "key" <IDENTIFIER> ( "," <IDENTIFIER> )* "on" <IDENTIFIER> ";"</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod23">ExternalDatasetDeclaration</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE>( "hdfs" ( <STRING_LITERAL> ) | "splits" ( <IDENTIFIER> ":" <STRING_LITERAL> ) ( "," <IDENTIFIER> ":" <STRING_LITERAL> )* ) "using" ( <STRING_LITERAL> <LEFTPAREN> ( ( <LEFTPAREN> ( <STRING_LITERAL> ":" <STRING_LITERAL> ) <RIGHTPAREN> ) ( "," <LEFTPAREN> ( <STRING_LITERAL> ":" <STRING_LITERAL> ) <RIGHTPAREN> )* )? <RIGHTPAREN> ) ";"</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod24">NodegroupDeclaration</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE><IDENTIFIER> ( "if not exists" )? "on" <IDENTIFIER> ( "," <IDENTIFIER> )* ";"</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod25">TypeDeclaration</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE><IDENTIFIER> ( "if not exists" )? "as" ( <A HREF="#prod26">TypeExpr</A> )</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod26">TypeExpr</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE>( <A HREF="#prod27">RecordTypeDef</A> | <A HREF="#prod28">TypeReference</A> | <A HREF="#prod29">OrderedListTypeDef</A> | <A HREF="#prod30">UnorderedListTypeDef</A> )</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod27">RecordTypeDef</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE>( "closed" | "open" )? "{" ( <A HREF="#prod31">RecordField</A> ( "," <A HREF="#prod31">RecordField</A> )* )? "}"</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod31">RecordField</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE><IDENTIFIER> ":" ( <A HREF="#prod26">TypeExpr</A> ) ( "?" )?</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod28">TypeReference</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE><IDENTIFIER></TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod29">OrderedListTypeDef</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE>"[" ( <A HREF="#prod26">TypeExpr</A> ) "]"</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod30">UnorderedListTypeDef</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE>"<" ( <A HREF="#prod26">TypeExpr</A> ) ">"</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod32">FunctionDeclaration</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE><IDENTIFIER> <LEFTPAREN> ( <VARIABLE> ( "," <VARIABLE> )* )? <RIGHTPAREN> "{" <A HREF="#prod6">Expression</A> "}"</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod2">Query</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod6">Expression</A></TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod6">Expression</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE>( <A HREF="#prod33">OperatorExpr</A> | <A HREF="#prod34">IfThenElse</A> | <A HREF="#prod35">FLWOGR</A> | <A HREF="#prod36">QuantifiedExpression</A> )</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod33">OperatorExpr</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod37">AndExpr</A> ( "or" <A HREF="#prod37">AndExpr</A> )*</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod37">AndExpr</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod38">RelExpr</A> ( "and" <A HREF="#prod38">RelExpr</A> )*</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod38">RelExpr</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod39">AddExpr</A> ( ( "<" | ">" | "<=" | ">=" | "=" | "!=" | "~=" ) <A HREF="#prod39">AddExpr</A> )?</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod39">AddExpr</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod40">MultExpr</A> ( ( "+" | "-" ) <A HREF="#prod40">MultExpr</A> )*</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod40">MultExpr</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod41">UnionExpr</A> ( ( "*" | "/" | "%" | <CARET> | "idiv" ) <A HREF="#prod41">UnionExpr</A> )*</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod41">UnionExpr</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod42">UnaryExpr</A> ( "union" ( <A HREF="#prod42">UnaryExpr</A> ) )*</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod42">UnaryExpr</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE>( ( "+" | "-" ) )? <A HREF="#prod43">ValueExpr</A></TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod43">ValueExpr</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod44">FieldOrIndexAccessor</A></TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod44">FieldOrIndexAccessor</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE>( <A HREF="#prod45">PrimaryExpr</A> ) ( ( <A HREF="#prod46">Field</A> ) | ( <A HREF="#prod47">Index</A> ) )*</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod46">Field</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE>"." <IDENTIFIER></TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod47">Index</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE>"[" ( <A HREF="#prod6">Expression</A> | "?" ) "]"</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod45">PrimaryExpr</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE>( <A HREF="#prod48">Literal</A> | <A HREF="#prod49">FunctionCallExpr</A> | <A HREF="#prod50">VariableRef</A> | <A HREF="#prod51">ListConstructor</A> | <A HREF="#prod52">RecordConstructor</A> | <A HREF="#prod53">ParenthesizedExpression</A> )</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod48">Literal</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE>( <STRING_LITERAL> | <INTEGER_LITERAL> | <FLOAT_LITERAL> | <DOUBLE_LITERAL> | <NULL> | <TRUE> | <FALSE> )</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod50">VariableRef</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE><VARIABLE></TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod5">Variable</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE><VARIABLE></TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod51">ListConstructor</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE>( <A HREF="#prod54">OrderedListConstructor</A> | <A HREF="#prod55">UnorderedListConstructor</A> )</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod54">OrderedListConstructor</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE>"[" ( <A HREF="#prod6">Expression</A> ( "," <A HREF="#prod6">Expression</A> )* )? "]"</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod55">UnorderedListConstructor</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE>"<" ( <A HREF="#prod6">Expression</A> ( "," <A HREF="#prod6">Expression</A> )* )? ">"</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod52">RecordConstructor</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE>"{" ( <A HREF="#prod56">FieldBinding</A> ( "," <A HREF="#prod56">FieldBinding</A> )* )? "}"</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod56">FieldBinding</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod6">Expression</A> ":" <A HREF="#prod6">Expression</A></TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod49">FunctionCallExpr</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE>( <IDENTIFIER> | <DATASET> ) <LEFTPAREN> ( <A HREF="#prod6">Expression</A> ( "," <A HREF="#prod6">Expression</A> )* )? <RIGHTPAREN></TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod53">ParenthesizedExpression</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE><LEFTPAREN> <A HREF="#prod6">Expression</A> <RIGHTPAREN></TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod34">IfThenElse</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE>"if" <LEFTPAREN> <A HREF="#prod6">Expression</A> <RIGHTPAREN> "then" <A HREF="#prod6">Expression</A> "else" <A HREF="#prod6">Expression</A></TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod35">FLWOGR</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE>( <A HREF="#prod57">ForClause</A> | <A HREF="#prod58">LetClause</A> ) ( <A HREF="#prod59">Clause</A> )* "return" <A HREF="#prod6">Expression</A></TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod59">Clause</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE>( <A HREF="#prod57">ForClause</A> | <A HREF="#prod58">LetClause</A> | <A HREF="#prod60">WhereClause</A> | <A HREF="#prod61">OrderbyClause</A> | <A HREF="#prod62">GroupClause</A> | <A HREF="#prod63">LimitClause</A> | <A HREF="#prod64">DistinctClause</A> )</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod57">ForClause</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE>"for" <A HREF="#prod5">Variable</A> ( "at" <A HREF="#prod5">Variable</A> )? "in" ( <A HREF="#prod6">Expression</A> )</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod58">LetClause</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE>"let" <A HREF="#prod5">Variable</A> ":=" <A HREF="#prod6">Expression</A></TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod60">WhereClause</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE>"where" <A HREF="#prod6">Expression</A></TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod61">OrderbyClause</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE>( "order" "by" <A HREF="#prod6">Expression</A> ( ( "asc" ) | ( "desc" ) )? ( "," <A HREF="#prod6">Expression</A> ( ( "asc" ) | ( "desc" ) )? )* )</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod62">GroupClause</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE>"group" "by" ( <A HREF="#prod5">Variable</A> ":=" )? <A HREF="#prod6">Expression</A> ( "," ( <A HREF="#prod5">Variable</A> ":=" )? <A HREF="#prod6">Expression</A> )* ( "decor" <A HREF="#prod5">Variable</A> ":=" <A HREF="#prod6">Expression</A> ( "," "decor" <A HREF="#prod5">Variable</A> ":=" <A HREF="#prod6">Expression</A> )* )? "with" <A HREF="#prod50">VariableRef</A> ( "," <A HREF="#prod50">VariableRef</A> )*</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod63">LimitClause</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE>"limit" <A HREF="#prod6">Expression</A> ( "offset" <A HREF="#prod6">Expression</A> )?</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod64">DistinctClause</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE>"distinct" "by" <A HREF="#prod6">Expression</A> ( "," <A HREF="#prod6">Expression</A> )*</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod36">QuantifiedExpression</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE>( ( "some" ) | ( "every" ) ) <A HREF="#prod5">Variable</A> "in" <A HREF="#prod6">Expression</A> ( "," <A HREF="#prod5">Variable</A> "in" <A HREF="#prod6">Expression</A> )* "satisfies" <A HREF="#prod6">Expression</A></TD> |
| </TR> |
| </TABLE> |
| </BODY> |
| </HTML> |