http://www.contrib.andrew.cmu.edu/~shadow/sql/sql2bnf.aug92.txt --------------------------------------------------------------This file contains a depth-first tree traversal of the BNF for the language done at about 27-AUG-1992 11:03:41.64. The specific version of the BNF included here is: ANSI-only, SQL2-only. <SQL terminal character> ::= <SQL language character> | <SQL embedded language character><SQL language character> ::= <simple Latin letter> | <digit> | <SQL special character><simple Latin letter> ::= <simple Latin upper case letter> | <simple Latin lower case letter><simple Latin upper case letter> ::= A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z<simple Latin lower case letter> ::= a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z<digit> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9<SQL special character> ::= <space> | <double quote> | <percent> | <ampersand> | <quote> | <left paren> | <right paren> | <asterisk> | <plus sign> | <comma> | <minus sign> | <period> | <solidus> | <colon> | <semicolon> | <less than operator> | <equals operator> | <greater than operator> | <question > | <underscore> | <vertical bar><space> ::= !! <EMPHASIS>(space character in character set in use)<double quote> ::= "<percent> ::= %<ampersand> ::= &<quote> ::= '<left paren> ::= (<right paren> ::= )<asterisk> ::= *<plus sign> ::= +<comma> ::= ,<minus sign> ::= -<period> ::= .<solidus> ::= /<colon> ::= :<semicolon> ::= ;<less than operator> ::= <<equals operator> ::= =
<greater than operator> ::= ><question > ::= ?<underscore> ::= _<vertical bar> ::= |<SQL embedded language character> ::= <left bracket> | <right bracket><left bracket> ::= [<right bracket> ::= ]<token> ::= <nondelimiter token> | <delimiter token><nondelimiter token> ::= <regular identifier> | <key word> | <unsigned numeric literal> | <national character string literal> | <bit string literal> | <hex string literal><regular identifier> ::= <identifier body><identifier body> ::= <identifier start> [ { <underscore> | <identifier part> }... ]<identifier start> ::= <EMPHASIS>(!! See the Syntax Rules)<identifier part> ::= <identifier start> | <digit><key word> ::= <reserved word> | <non-reserved word><reserved word> ::= ABSOLUTE | ACTION | ADD | ALL | ALLOCATE | ALTER | AND | ANY | ARE | AS | ASC | ASSERTION | AT | AUTHORIZATION | AVG | BEGIN | BETWEEN | BIT | BIT_LENGTH | BOTH | BY | CASCADE | CASCADED | CASE | CAST | CATALOG | CHAR | CHARACTER | CHAR_LENGTH | CHARACTER_LENGTH | CHECK | CLOSE | COALESCE | COLLATE | COLLATION | COLUMN | COMMIT | CONNECT | CONNECTION | CONSTRAINT | CONSTRAINTS | CONTINUE | CONVERT | CORRESPONDING | COUNT | CREATE | CROSS | CURRENT | CURRENT_DATE | CURRENT_TIME | CURRENT_TIMESTAMP | CURRENT_USER | CURSOR | DATE | DAY | DEALLOCATE | DEC | DECIMAL | DECLARE | DEFAULT | DEFERRABLE | DEFERRED | DELETE | DESC | DESCRIBE | DESCRIPTOR | DIAGNOSTICS | DISCONNECT | DISTINCT | DOMAIN | DOUBLE | DROP | ELSE | END | END-EXEC | ESCAPE | EXCEPT | EXCEPTION | EXEC | EXECUTE | EXISTS | EXTERNAL | EXTRACT | FALSE | FETCH | FIRST | FLOAT | FOR | FOREIGN | FOUND | FROM | FULL | GET | GLOBAL | GO | GOTO | GRANT | GROUP | HAVING | HOUR | IDENTITY | IMMEDIATE | IN | INDICATOR | INITIALLY | INNER | INPUT | INSENSITIVE | INSERT | INT | INTEGER | INTERSECT | INTERVAL | INTO | IS | ISOLATION | JOIN | KEY | LANGUAGE | LAST | LEADING | LEFT | LEVEL | LIKE | LOCAL | LOWER | MATCH | MAX | MIN | MINUTE | MODULE | MONTH | NAMES | NATIONAL | NATURAL | NCHAR | NEXT | NO | NOT | NULL | NULLIF | NUMERIC | OCTET_LENGTH | OF | ON | ONLY | OPEN | OPTION | OR | ORDER | OUTER | OUTPUT | OVERLAPS | PAD | PARTIAL | POSITION | PRECISION | PREPARE | PRESERVE | PRIMARY | PRIOR | PRIVILEGES | PROCEDURE | PUBLIC | READ | REAL | REFERENCES | RELATIVE | RESTRICT | REVOKE | RIGHT | ROLLBACK | ROWS | SCHEMA | SCROLL | SECOND | SECTION | SELECT | SESSION | SESSION_USER | SET | SIZE | SMALLINT | SOME | SPACE | SQL | SQLCODE | SQLERROR | SQLSTATE | SUBSTRING | SUM | SYSTEM_USER | TABLE | TEMPORARY | THEN | TIME | TIMESTAMP | TIMEZONE_HOUR | TIMEZONE_MINUTE | TO | TRAILING | TRANSACTION | TRANSLATE | TRANSLATION | TRIM | TRUE | UNION | UNIQUE | UNKNOWN | UPDATE | UPPER | USAGE | USER | USING | VALUE | VALUES | VARCHAR | VARYING | VIEW | WHEN | WHENEVER | WHERE | WITH | WORK | WRITE | YEAR | ZONE<non-reserved word> ::=
--------------------------------------------------------------This file contains a depth-first tree traversal of the BNF
for the language done at about 27-AUG-1992 11:03:41.64.
The specific version of the BNF included here is: ANSI-only, SQL2-only.
<SQL terminal character> ::=
<SQL language character>
| <SQL embedded language character><SQL language character> ::=
<simple Latin letter>
| <digit>
| <SQL special character><simple Latin letter> ::=
<simple Latin upper case letter>
| <simple Latin lower case letter><simple Latin upper case letter> ::=
A | B | C | D | E | F | G | H | I | J | K | L | M | N | O
| P | Q | R | S | T | U | V | W | X | Y | Z<simple Latin lower case letter> ::=
a | b | c | d | e | f | g | h | i | j | k | l | m | n | o
| p | q | r | s | t | u | v | w | x | y | z<digit> ::=
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9<SQL special character> ::=
<space>
| <double quote>
| <percent>
| <ampersand>
| <quote>
| <left paren>
| <right paren>
| <asterisk>
| <plus sign>
| <comma>
| <minus sign>
| <period>
| <solidus>
| <colon>
| <semicolon>
| <less than operator>
| <equals operator>
| <greater than operator>
| <question >
| <underscore>
| <vertical bar><space> ::= !! <EMPHASIS>(space character in character set in use)<double quote> ::= "<percent> ::= %<ampersand> ::= &<quote> ::= '<left paren> ::= (<right paren> ::= )<asterisk> ::= *<plus sign> ::= +<comma> ::= ,<minus sign> ::= -<period> ::= .<solidus> ::= /<colon> ::= :<semicolon> ::= ;<less than operator> ::= <<equals operator> ::= =
<left bracket>
| <right bracket><left bracket> ::= [<right bracket> ::= ]<token> ::=
<nondelimiter token>
| <delimiter token><nondelimiter token> ::=
<regular identifier>
| <key word>
| <unsigned numeric literal>
| <national character string literal>
| <bit string literal>
| <hex string literal><regular identifier> ::= <identifier body><identifier body> ::=
<identifier start> [ { <underscore> | <identifier part> }... ]<identifier start> ::= <EMPHASIS>(!! See the Syntax Rules)<identifier part> ::=
<identifier start>
| <digit><key word> ::=
<reserved word>
| <non-reserved word><reserved word> ::=
ABSOLUTE | ACTION | ADD | ALL
| ALLOCATE | ALTER | AND
| ANY | ARE
| AS | ASC
| ASSERTION | AT
| AUTHORIZATION | AVG
| BEGIN | BETWEEN | BIT | BIT_LENGTH
| BOTH | BY
| CASCADE | CASCADED | CASE | CAST
| CATALOG
| CHAR | CHARACTER | CHAR_LENGTH
| CHARACTER_LENGTH | CHECK | CLOSE | COALESCE
| COLLATE | COLLATION
| COLUMN | COMMIT
| CONNECT
| CONNECTION | CONSTRAINT
| CONSTRAINTS | CONTINUE
| CONVERT | CORRESPONDING | COUNT | CREATE | CROSS
| CURRENT
| CURRENT_DATE | CURRENT_TIME
| CURRENT_TIMESTAMP | CURRENT_USER | CURSOR
| DATE | DAY | DEALLOCATE | DEC
| DECIMAL | DECLARE | DEFAULT | DEFERRABLE
| DEFERRED | DELETE | DESC | DESCRIBE | DESCRIPTOR
| DIAGNOSTICS
| DISCONNECT | DISTINCT | DOMAIN | DOUBLE | DROP
| ELSE | END | END-EXEC | ESCAPE
| EXCEPT | EXCEPTION
| EXEC | EXECUTE | EXISTS
| EXTERNAL | EXTRACT
| FALSE | FETCH | FIRST | FLOAT | FOR
| FOREIGN | FOUND | FROM | FULL
| GET | GLOBAL | GO | GOTO
| GRANT | GROUP
| HAVING | HOUR
| IDENTITY | IMMEDIATE | IN | INDICATOR
| INITIALLY | INNER | INPUT
| INSENSITIVE | INSERT | INT | INTEGER | INTERSECT
| INTERVAL | INTO | IS
| ISOLATION
| JOIN
| KEY
| LANGUAGE | LAST | LEADING | LEFT
| LEVEL | LIKE | LOCAL | LOWER
| MATCH | MAX | MIN | MINUTE | MODULE
| MONTH
| NAMES | NATIONAL | NATURAL | NCHAR | NEXT | NO
| NOT | NULL
| NULLIF | NUMERIC
| OCTET_LENGTH | OF
| ON | ONLY | OPEN | OPTION | OR
| ORDER | OUTER
| OUTPUT | OVERLAPS
| PAD | PARTIAL | POSITION | PRECISION | PREPARE
| PRESERVE | PRIMARY
| PRIOR | PRIVILEGES | PROCEDURE | PUBLIC
| READ | REAL | REFERENCES | RELATIVE | RESTRICT
| REVOKE | RIGHT
| ROLLBACK | ROWS
| SCHEMA | SCROLL | SECOND | SECTION
| SELECT
| SESSION | SESSION_USER | SET
| SIZE | SMALLINT | SOME | SPACE | SQL | SQLCODE
| SQLERROR | SQLSTATE
| SUBSTRING | SUM | SYSTEM_USER
| TABLE | TEMPORARY
| THEN | TIME | TIMESTAMP
| TIMEZONE_HOUR | TIMEZONE_MINUTE
| TO | TRAILING | TRANSACTION
| TRANSLATE | TRANSLATION | TRIM | TRUE
| UNION | UNIQUE | UNKNOWN | UPDATE | UPPER | USAGE
| USER | USING
| VALUE | VALUES | VARCHAR | VARYING | VIEW
| WHEN | WHENEVER | WHERE | WITH | WORK | WRITE
| YEAR
| ZONE<non-reserved word> ::=
ADA
| C | CATALOG_NAME
| CHARACTER_SET_CATALOG | CHARACTER_SET_NAME
| CHARACTER_SET_SCHEMA | CLASS_ORIGIN | COBOL | COLLATION_CATALOG
| COLLATION_NAME | COLLATION_SCHEMA | COLUMN_NAME | COMMAND_FUNCTION
| COMMITTED
| CONDITION_NUMBER | CONNECTION_NAME | CONSTRAINT_CATALOG | CONSTRAINT_NAME
| CONSTRAINT_SCHEMA | CURSOR_NAME
| DATA | DATETIME_INTERVAL_CODE
| DATETIME_INTERVAL_PRECISION | DYNAMIC_FUNCTION
| FORTRAN
| LENGTH
| MESSAGE_LENGTH | MESSAGE_OCTET_LENGTH | MESSAGE_TEXT | MORE | MUMPS
| NAME | NULLABLE | NUMBER
| PASCAL | PLI
| REPEATABLE | RETURNED_LENGTH | RETURNED_OCTET_LENGTH | RETURNED_SQLSTATE
| ROW_COUNT
| SCALE | SCHEMA_NAME | SERIALIZABLE | SERVER_NAME | SUBCLASS_ORIGIN
| TABLE_NAME | TYPE
| UNCOMMITTED | UNNAMED<unsigned numeric literal> ::=
<exact numeric literal>
| <approximate numeric literal><exact numeric literal> ::=
<unsigned integer> [ <period> [ <unsigned integer> ] ]
| <period> <unsigned integer><unsigned integer> ::= <digit>...<approximate numeric literal> ::= <mantissa> E <exponent><mantissa> ::= <exact numeric literal><exponent> ::= <signed integer><signed integer> ::= [ <sign> ] <unsigned integer><sign> ::= <plus sign> | <minus sign><national character string literal> ::=
N <quote> [ <character representation>... ] <quote>
[ { <separator>... <quote> [ <character representation>... ] <quote> }... ]<character representation> ::=
<nonquote character>
| <quote symbol><nonquote character> ::= !! <EMPHASIS>(See the Syntax Rules.)<quote symbol> ::= <quote><quote><separator> ::= { <comment> | <space> | <newline> }...<comment> ::=
<comment introducer> [ <comment character>... ] <newline><comment introducer> ::= <minus sign><minus sign>[<minus sign>...]<comment character> ::=
<nonquote character>
| <quote><newline> ::= !! <EMPHASIS>(implementation-defined end-of-line indicator)<bit string literal> ::=
B <quote> [ <bit>... ] <quote>
[ { <separator>... <quote> [ <bit>... ] <quote> }... ]<bit> ::= 0 | 1<hex string literal> ::=
X <quote> [ <hexit>... ] <quote>
[ { <separator>... <quote> [ <hexit>... ] <quote> }... ]<hexit> ::= <digit> | A | B | C | D | E | F | a | b | c | d | e | f<delimiter token> ::=
<character string literal>
| <date string>
| <time string>
| <timestamp string>
| <interval string>
| <delimited identifier>
| <SQL special character>
| <not equals operator>
| <greater than or equals operator>
| <less than or equals operator>
| <concatenation operator>
| <double period>
| <left bracket>
| <right bracket><character string literal> ::=
[ <introducer><character set specification> ]
<quote> [ <character representation>... ] <quote>
[ { <separator>... <quote> [ <character representation>... ] <quote> }... ]<introducer> ::= <underscore><character set specification> ::=
<standard character repertoire name>
| <implementation-defined character repertoire name>
| <user-defined character repertoire name>
| <standard universal character form-of-use name>
| <implementation-defined universal character form-of-use name>
<standard character repertoire name> ::= <character set name><character set name> ::= [ <schema name> <period> ]
<SQL language identifier><schema name> ::=
[ <catalog name> <period> ] <unqualified schema name><catalog name> ::= <identifier><identifier> ::=
[ <introducer><character set specification> ] <actual identifier><actual identifier> ::=
<regular identifier>
| <delimited identifier><delimited identifier> ::=
<double quote> <delimited identifier body> <double quote><delimited identifier body> ::= <delimited identifier part>...<delimited identifier part> ::=
<nondoublequote character>
| <doublequote symbol><nondoublequote character> ::= <EMPHASIS>(!! See the Syntax Rules)<doublequote symbol> ::= <double quote><double quote><unqualified schema name> ::= <identifier><SQL language identifier> ::=
<SQL language identifier start>
[ { <underscore> | <SQL language identifier part> }... ]<SQL language identifier start> ::= <simple Latin letter><SQL language identifier part> ::=
<simple Latin letter>
| <digit><implementation-defined character repertoire name> ::=
<character set name><user-defined character repertoire name> ::= <character set name><standard universal character form-of-use name> ::=
<character set name><implementation-defined universal character form-of-use name> ::=
<character set name><date string> ::=
<quote> <date value> <quote><date value> ::=
<years value> <minus sign> <months value>
<minus sign> <days value><years value> ::= <datetime value><datetime value> ::= <unsigned integer><months value> ::= <datetime value><days value> ::= <datetime value><time string> ::=
<quote> <time value> [ <time zone interval> ] <quote><time value> ::=
<hours value> <colon> <minutes value> <colon> <seconds value><hours value> ::= <datetime value><minutes value> ::= <datetime value><seconds value> ::=
<seconds integer value> [ <period> [ <seconds fraction> ] ]<seconds integer value> ::= <unsigned integer><seconds fraction> ::= <unsigned integer><time zone interval> ::=
<sign> <hours value> <colon> <minutes value><timestamp string> ::=
<quote> <date value> <space> <time value>
[ <time zone interval> ] <quote><interval string> ::=
<quote> { <year-month literal> | <day-time literal> } <quote><year-month literal> ::=
<years value>
| [ <years value> <minus sign> ] <months value><day-time literal> ::=
<day-time interval>
| <time interval><day-time interval> ::=
<days value>
[ <space> <hours value> [ <colon> <minutes value>
[ <colon> <seconds value> ] ] ]<time interval> ::=
<hours value> [ <colon> <minutes value> [ <colon> <seconds value> ] ]
| <minutes value> [ <colon> <seconds value> ]
| <seconds value><not equals operator> ::= <><greater than or equals operator> ::= >=<less than or equals operator> ::= <=<concatenation operator> ::= ||<double period> ::= ..<module> ::=
<module name clause>
<language clause>
<module authorization clause>
[ <temporary table declaration>... ]
<module contents>...<module name clause> ::=
MODULE [ <module name> ]
[ <module character set specification> ]<module name> ::= <identifier><module character set specification> ::=
NAMES ARE <character set specification><language clause> ::=
LANGUAGE <language name><language name> ::=
ADA | C | COBOL | FORTRAN | MUMPS | PASCAL | PLI<module authorization clause> ::=
SCHEMA <schema name>
| AUTHORIZATION <module authorization identifier>
| SCHEMA <schema name>
AUTHORIZATION <module authorization identifier><module authorization identifier> ::=
<authorization identifier><authorization identifier> ::= <identifier><temporary table declaration> ::=
DECLARE LOCAL TEMPORARY TABLE
<qualified local table name>
<table element list>
[ ON COMMIT { PRESERVE | DELETE } ROWS ]<qualified local table name> ::=
MODULE <period> <local table name><local table name> ::= <qualified identifier><qualified identifier> ::= <identifier><table element list> ::=
<left paren> <table element> [ { <comma> <table element> }... ] <right paren><table element> ::=
<column definition>
| <table constraint definition><column definition> ::=
<column name> { <data type> | <domain name> }
[ <default clause> ]
[ <column constraint definition>... ]
[ <collate clause> ]<column name> ::= <identifier><data type> ::=
<character string type>
[ CHARACTER SET <character set specification> ]
| <national character string type>
| <bit string type>
| <numeric type>
| <datetime type>
| <interval type><character string type> ::=
CHARACTER [ <left paren> <length> <right paren> ]
| CHAR [ <left paren> <length> <right paren> ]
| CHARACTER VARYING <left paren> <length> <right paren>
| CHAR VARYING <left paren> <length> <right paren>
| VARCHAR <left paren> <length> <right paren><length> ::= <unsigned integer><national character string type> ::=
NATIONAL CHARACTER [ <left paren> <length> <right paren> ]
| NATIONAL CHAR [ <left paren> <length> <right paren> ]
| NCHAR [ <left paren> <length> <right paren> ]
| NATIONAL CHARACTER VARYING <left paren> <length> <right paren>
| NATIONAL CHAR VARYING <left paren> <length> <right paren>
| NCHAR VARYING <left paren> <length> <right paren><bit string type> ::=
BIT [ <left paren> <length> <right paren> ]
| BIT VARYING <left paren> <length> <right paren><numeric type> ::=
<exact numeric type>
| <approximate numeric type><exact numeric type> ::=
NUMERIC [ <left paren> <precision> [ <comma> <scale> ] <right paren> ]
| DECIMAL [ <left paren> <precision> [ <comma> <scale> ] <right paren> ]
| DEC [ <left paren> <precision> [ <comma> <scale> ] <right paren> ]
| INTEGER
| INT
| SMALLINT<precision> ::= <unsigned integer><scale> ::= <unsigned integer><approximate numeric type> ::=
FLOAT [ <left paren> <precision> <right paren> ]
| REAL
| DOUBLE PRECISION<datetime type> ::=
DATE
| TIME [ <left paren> <time precision> <right paren> ]
[ WITH TIME ZONE ]
| TIMESTAMP [ <left paren> <timestamp precision> <right paren> ]
[ WITH TIME ZONE ]<time precision> ::= <time fractional seconds precision><time fractional seconds precision> ::= <unsigned integer><timestamp precision> ::= <time fractional seconds precision><interval type> ::= INTERVAL <interval qualifier><interval qualifier> ::=
<start field> TO <end field>
| <single datetime field><start field> ::=
<non-second datetime field>
[ <left paren> <interval leading field precision> <right paren> ]<non-second datetime field> ::= YEAR | MONTH | DAY | HOUR
| MINUTE<interval leading field precision> ::= <unsigned integer><end field> ::=
<non-second datetime field>
| SECOND [ <left paren> <interval fractional seconds precision> <right paren> ]<interval fractional