SelectExpression ::= OrExpression? // Note 0
// Lexical Elements
Alpha ::= [a-zA-Z]
Digit ::= [0-9]
IdentifierInitial ::= Alpha | "_" | "$"
IdentifierPart ::= IdentifierInitial | Digit | "."
Identifier ::= IdentifierInitial IdentifierPart*
Constraint : Identifier NOT IN ("NULL", "TRUE", "FALSE", "NOT", "AND", "OR", "BETWEEN", "LIKE", "IN", "IS", "ESCAPE") // Note 1
LiteralString ::= ("'" [^']* "'")+ // Note 2
LiteralExactNumeric ::= Digit+
Exponent ::= ("+"|"-")? LiteralExactNumeric
LiteralApproxNumeric ::= Digit "." Digit* ( "E" Exponent )? |
"." Digit+ ( "E" Exponent )? |
Digit+ "E" Exponent // Note 1
LiteralBool ::= "TRUE" | "FALSE" // Note 1
Literal ::= LiteralBool | LiteralString | LiteralApproxNumeric | LiteralExactNumeric
EqOps ::= "=" | "<>"
ComparisonOps ::= EqOps | ">" | ">=" | "<" | "<="
AddOps ::= "+" | "-"
MultiplyOps ::= "*" | "/"
// Expression syntax
OrExpression ::= AndExpression ( "OR" AndExpression )*
AndExpression ::= ComparisonExpression ( "AND" ComparisonExpression )*
ComparisonExpression ::= AddExpression "IS" "NOT"? "NULL" |
AddExpression "NOT"? "LIKE" LiteralString ( "ESCAPE" LiteralString )? |
AddExpression "NOT"? "BETWEEN" AddExpression "AND" AddExpression |
AddExpression "NOT"? "IN" "(" PrimaryExpression ("," PrimaryExpression)* ")" |
AddExpression ComparisonOps AddExpression |
"NOT" ComparisonExpression |
AddExpression // Note 3
AddExpression ::= MultiplyExpression ( AddOps MultiplyExpression )*
MultiplyExpression ::= UnaryArithExpression ( MultiplyOps UnaryArithExpression )*
UnaryArithExpression ::= AddOps AddExpression |
"(" OrExpression ")" |
PrimaryExpression
PrimaryExpression ::= Identifier |
Literal
SelectExpression ::= OrExpression? // Note 0
// Lexical Elements
Alpha ::= [a-zA-Z]
Digit ::= [0-9]
IdentifierInitial ::= Alpha | "_" | "$"
IdentifierPart ::= IdentifierInitial | Digit | "."
Identifier ::= IdentifierInitial IdentifierPart*
Constraint : Identifier NOT IN ("NULL", "TRUE", "FALSE", "NOT", "AND", "OR", "BETWEEN", "LIKE", "IN", "IS", "ESCAPE") // Note 1
LiteralString ::= ("'" [^']* "'")+ // Note 2
LiteralExactNumeric ::= Digit+
Exponent ::= ("+"|"-")? LiteralExactNumeric
LiteralApproxNumeric ::= Digit "." Digit* ( "E" Exponent )? |
"." Digit+ ( "E" Exponent )? |
Digit+ "E" Exponent // Note 1
LiteralBool ::= "TRUE" | "FALSE" // Note 1
Literal ::= LiteralBool | LiteralString | LiteralApproxNumeric | LiteralExactNumeric
EqOps ::= "=" | "<>"
ComparisonOps ::= EqOps | ">" | ">=" | "<" | "<="
AddOps ::= "+" | "-"
MultiplyOps ::= "*" | "/"
// Expression syntax
OrExpression ::= AndExpression ( "OR" AndExpression )*
AndExpression ::= ComparisonExpression ( "AND" ComparisonExpression )*
ComparisonExpression ::= AddExpression "IS" "NOT"? "NULL" |
AddExpression "NOT"? "LIKE" LiteralString ( "ESCAPE" LiteralString )? |
AddExpression "NOT"? "BETWEEN" AddExpression "AND" AddExpression |
AddExpression "NOT"? "IN" "(" PrimaryExpression ("," PrimaryExpression)* ")" |
AddExpression ComparisonOps AddExpression |
"NOT" ComparisonExpression |
AddExpression // Note 3
AddExpression ::= MultiplyExpression ( AddOps MultiplyExpression )*
MultiplyExpression ::= UnaryArithExpression ( MultiplyOps UnaryArithExpression )*
UnaryArithExpression ::= AddOps AddExpression |
"(" OrExpression ")" |
PrimaryExpression
PrimaryExpression ::= Identifier |
Literal
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow