home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / sssql.ycc < prev    next >
Text File  |  1995-04-16  |  27KB  |  729 lines

  1. //---------------------------------------------------------------------
  2. //
  3. // WARNING: The demo version of Visual Parse++ will not compile this
  4. // rule file, it's to large. The demo version is limited to very
  5. // small rule files.
  6. //
  7. // This is an SQL rule file that we got off the internet and transcribed
  8. // to our format (we have copyright permission from the author). 
  9. // It parses SQL II. We have done some testing, and the original 
  10. // yacc file has been around for some time. It has been used by 
  11. // several institutions, so we think its complete.
  12. //
  13. // The grammar generates 3 shift/reduce conflicts (6 messages). You can
  14. // ignore them all, the shift (the default) is the appropriate action
  15. // to take.
  16. //
  17. // We also have an embedded SQL version of the same grammar. It required
  18. // only very minor changes to this rule file.
  19. //
  20. //---------------------------------------------------------------------- 
  21.  
  22. %macro
  23. {D}               [0-9];
  24. {E}               [Ee][\-+]?{D}+;
  25.  
  26. %expression Main
  27. '"$"[a-zA-Z_][a-zA-Z0-9_#@]*'                  PARM;
  28. '[a-zA-Z_][a-zA-Z0-9_#@]*'                     IDENTIFIER;
  29. '\"'                                           %ignore, %push DQuote;
  30. ''''                                           %ignore, %push SQuote;
  31. '{D}+'                                         INTEGER;
  32. '({D}+"."{D}*({E})?)|({D}+{E})'                REAL;
  33. ":"                                            TCOL;
  34. ":"                                            Colon, ':' ;
  35. ';'                                            Semicolon, ';';
  36. ".*"                                           ALLFIELDS, '.*';
  37. "."                                            Dot, '.' ;
  38. ','                                            PORD;
  39. ','                                            Comma, ',' ;
  40. "!"                                            Not, '!';
  41. "!="                                           Ne, '!=';
  42. "<="                                           Le, '<=';
  43. ">="                                           Ge, '>=';
  44. "<"                                            Lt, '<';
  45. "!<"                                           Nlt, '!<';
  46. ">"                                            Gt, '>';
  47. "!>"                                           Ngt, '!>';
  48. "("                                            Oparen, '(';
  49. ")"                                            CParen, ')';
  50. ">>"                                           RShift, '>>';
  51. "<<"                                           LShift, '<<';
  52. "|"                                            Bitor, '|';
  53. "||"                                           Or, '||';
  54. "^"                                            Bitxor, '^';
  55. "&"                                            Bitand, '&';
  56. "&&"                                           And, '&&';
  57. "~"                                            BitNot, '~';
  58. "`"                                            Semantic, '`';
  59. "]"                                            CBrack, ']';
  60. "["                                            OBrack, '[';
  61. "="                                            ASSIGN;
  62. "="                                            EQ, '=';
  63. "+"                                            Plus, '+';
  64. "-"                                            UMINUS;
  65. "-"                                            Minus, '-';
  66. "*"                                            Mult, '*';
  67. "**"                                           Power, '**';
  68. '/'                                            Div, '/';
  69. "%"                                            Mod, '%';
  70. "?"                                            Quest, '?';
  71. '[ \n\t\r]+'                                   %ignore;
  72.  
  73. '[aA][dD][dD]'                                 ADD;
  74. '[aA][lL][lL]'                                 ALL;
  75. '[aA][lL][lL][oO][wW][eE][dD]'                 ALLOWED;
  76. '[aA][fF][tT][eE][rR]'                         AFTER;
  77. '[aA][lL][tT][eE][rR]'                         ALTER;
  78. '[aA][nN][dD]'                                 AND;
  79. '[aA][nN][yY]'                                 ANY;
  80. '[aA][sS]'                                     AS;
  81. '[aA][sS][cC]'                                 ASC;
  82. '[aA][tT]'                                     AT;
  83. '[aA][uU][dD][iI][tT]'                         AUDIT;
  84. '[bB][eE][fF][oO][rR][eE]'                     BEFORE;
  85. '[bB][bB][eE][gG][iI][nN]'                     BBEGIN;
  86. '[bB][eE][tT][wW][eE][eE][nN]'                 BETWEEN;
  87. '[bB][yY]'                                     BY;
  88. '[cC][hH][eE][cC][kK]'                         CHECK;
  89. '[cC][lL][oO][sS][eE]'                         CLOSE;
  90. '[cC][oO][mM][mM][rE][nN][tT]'                 COMMENT;
  91. '[cC][oO][mM][mM][iI][tT]'                     COMMIT;
  92. '[cC][Oo][Mm][Pp][Oo][Ss][Ii][Tt][Ee]'         COMPOSITE;
  93. '[cC][oO][nN][sS][tT][rR][aA][iI][nN][tT]'     CONSTRAINT;
  94. '[cC][rR][eE][aA][tT][eE]'                     CREATE;
  95. '[dD][aA][tT][aA][bB][aA][sS][eE]'             DATABASE;
  96. '[dD][eE][fF][aA][uU][lL][tT]'                 DEFAULT;
  97. '[dD][eE][lL][eE][tT][eE]'                     DELETE;
  98. '[dD][eE][sS][cC]'                             DESC;
  99. '[dD][iI][sS][tT][iI][nN][cC][tT]'             DISTINCT;
  100. '[dD][iI][vV][iI][dD][eE][bB][yY]'             DIVIDEBY;
  101. '[dD][oO][mM][aA][iI][nN]'                     DOMAIN;
  102. '[dD][rR][oO][pP]'                             DROP;
  103. '[dD][uU][mM][pP]'                             DUMP;
  104. '[eE][nN][dD]'                                 END;
  105. '[eE][lL][sS][eE]'                             ELSE;
  106. '[eE][xX][iI][sS][tT][sS]'                     EXISTS;
  107. '[fF][oO][rR]'                                 FOR;
  108. '[fF][oO][rR][eE][iI][gG][nN]'                 FOREIGN;
  109. '[fF][rR][aA][gG][mM][eE][nN][tT]'             FRAGMENT;
  110. '[fF][rR][oO][mM]'                             FROM;
  111. '[gG][rR][aA][nN][tT]'                         GRANT;
  112. '[gG][rR][oO][uU][pP]'                         GROUP;
  113. '[hH][aA][vV][iI][nN][gG]'                     HAVING;
  114. '[iI][dD][eE][nN][tT][iI][fF][iI][eE][sS]'     IDENTIFIES;
  115. '[iI][fF]'                                     IF;
  116. '[iI][nN]'                                     IN;
  117. '[iI][nN][dD][eE][xX]'                         INDEX;
  118. '[iI][nN][fF][oO]'                             INFO;
  119. '[iI][nN][sS][eE][rR][tT]'                     INSERT;
  120. '[iI][nN][tT][oO]'                             INTO;
  121. '[iI][nN][tT][eE][rR][sS][eE][cC][tT]'         INTERSECT;
  122. '[iI][sS]'                                     IS;
  123. '[lL][iI][kK][eE]'                             LIKE;
  124. '[lL][oO][cC][kK]'                             LOCK;
  125. '[mM][iI][nN][uU][sS]'                         MINUS;
  126. '[mM][oO][dD][eE]'                             MODE;
  127. '[mM][oO][dD][iI][fF][yY]'                     MODIFY;
  128. '[nN][oO][tT]'                                 NOT;
  129. '[nN][uU][lL][lL]'                             NULLN;
  130. '[nN][uU][lL][lL][sS]'                         NULLS;
  131. '[oO][fF]'                                     OF;
  132. '[oO][nN]'                                     ON;
  133. '[oO][pP][eE][nN]'                             OPEN;
  134. '[oO][pP][tT][iI][oO][nN]'                     OPTION;
  135. '[oO][rR]'                                     OR;
  136. '[oO][rR][dD][eE][rR]'                         ORDER;
  137. '[oO][uU][tT][eE][rR]'                         OUTER;
  138. '[pP][rR][iI][mM][aA][rR][yY]'                 PRIMARY;
  139. '[pP][rR][oO][gG][rR][aA][mM]'                 PROGRAM;
  140. '[rR][aA][nN][gG][eE]'                         RANGE;
  141. '[rR][eE][pP][aA][iI][rR]'                     REPAIR;
  142. '[rR][eE][sS][tT][oO][rR][eE]'                 RESTORE;
  143. '[rR][eE][vV][oO][kK][eE]'                     REVOKE;
  144. '[rR][oO][lL][lL][bB][aA][cC][kK]'             ROLLBACK;
  145. '[rR][oO][lL][lL][fF][oO][rR][wW][aA][rR][dD]' ROLLFORWARD;
  146. '[sS][eE][lL][eE][cC][tT]'                     SELECT;
  147. '[sS][eE][tT]'                                 SET;
  148. '[sS][hH][oO][wW]'                             SHOW;
  149. '[sS][nN][aA][pP][sS][hH][oO][tT]'             SNAPSHOT;
  150. '[sS][tT][aA][rR][tT]'                         START;
  151. '[sS][tT][oO][rR][eE]'                         STORE;
  152. '[sS][yY][nN][cC]'                             SYNC;
  153. '[sS][yY][nN][oO][nN][yY][mM]'                 SYNONYM;
  154. '[Tt][aA][bB][lL][eE]'                         TABLE;
  155. '[Tt][hH][eE][nN]'                             THEN;
  156. '[Tt][oO]'                                     TO;
  157. '[tT][yY][pP][eE]'                             TYPE;
  158. '[vV][aA][lL][uU][eE][sS]'                     VALUES;
  159. '[vV][iI][eE][wW]'                             VIEW;
  160. '[uU][nN][iI][oO][nN]'                         UNION;
  161. '[uU][nN][iI][qQ][uU][eE]'                     UNIQUE;
  162. '[uU][pP][dD][aA][tT][eE]'                     UPDATE;
  163. '[wW][hH][eE][rR][eE]'                         WHERE;
  164. '[wW][oO][rR][kK]'                             WORK;
  165. '[wW][iI][tT][hH]'                             WITH;
  166.  
  167. %expression DQuote
  168. '[^"\\\n]+'                                                 STRINGPART;
  169. '\\\n'                                                     %ignore;
  170. '\\'                                                          STRINGPART;
  171. '\"'                                                          STRINGEND, %pop;
  172.  
  173. %expression SQuote
  174. '[^''\\\n]+'                                                STRINGPART;
  175. '\\\n'                                                     %ignore;
  176. '\\'                                                          STRINGPART;
  177. ''''                                                          STRINGEND, %pop;
  178.  
  179. %prec
  180. 1, ';',    %left;
  181. 2, WHERE   %left;
  182. 3, OR,     %left;
  183. 4, AND,    %left;
  184. 5, ','     %left;
  185. 6, ASSIGN, %right;
  186. 7, TCOL,   %right;
  187. 8, '?',    %left;
  188. 9, '||',   %left;
  189. 10,'&&',   %left;
  190. 11, '|',   %left;
  191. 12, '^',   %left;
  192. 13, '&',   %left;
  193. 14, '!<',  %left;
  194. 14, '!>',  %left;
  195. 14, '<',   %left;
  196. 14, '>',   %left;
  197. 14, '<=',  %left;
  198. 14, '>=',  %left;
  199. 14, '!=',  %left;
  200. 14, '=',   %left;
  201. 15, '<<',  %left;
  202. 15, '>>',  %left;
  203. 16, '+',   %left;
  204. 16, '-',   %left;
  205. 17, '*',   %left;
  206. 17, '/',   %left;
  207. 17, '%',   %left;
  208. 18, '**',  %right;
  209. 19, UMINUS,%right;
  210. 19, '~',   %right;
  211. 20, PORD,  %left;
  212. 21, '`',   %left;
  213. 22, '.',   %left;
  214.  
  215. %production dsl
  216.  
  217. StartDsl        dsl  -> stats;
  218. StartProg       dsl  -> STORE PROGRAM prog_name '(' parm_list ')'
  219.                                   stats ';' END STORE ';';
  220. Stats           stats -> stats statWithEnd;
  221. StatsOne        stats -> statWithEnd;
  222.  
  223. StatWithEnd     statWithEnd -> statement ';';
  224.  
  225. StatError       statement -> %error;
  226. StatAlter       statement -> alter;
  227. StatAudit       statement -> audit;
  228. StatBegin       statement -> begin;
  229. StatCheck       statement -> check;
  230. StatClose       statement -> close;
  231. StatComment     statement -> comment;
  232. StatCommit      statement -> commit;
  233. StatCreate      statement -> create;
  234. StatDelete      statement -> delete;
  235. StatDrop        statement -> drop;
  236. StatDump        statement -> dump;
  237. StatGrant       statement -> grant;
  238. StatInfo        statement -> info;
  239. StatInsert      statement -> insert;
  240. StatLock        statement -> lock;
  241. StatOpen        statement -> open;
  242. StatRollback    statement -> rollback;
  243. StatRollforw    statement -> rollforward;
  244. StatRepair      statement -> repair;
  245. StatRestore     statement -> restore;
  246. StatRevoke      statement -> revoke;
  247. StatSelect      statement -> select;
  248. StatSet         statement -> set;
  249. StatStart       statement -> start;
  250. StatSync        statement -> sync;
  251. StatUpdate      statement -> update;
  252.  
  253. Start           start -> prog_name '(' expr_list ')';
  254.  
  255. ParmListOne     parm_list -> parm;
  256. ParmList        parm_list -> parm ',' parm_list;
  257.  
  258. Parm            parm -> parm_name;
  259. ParmExpr        parm -> parm_name EQ expr %prec ASSIGN;
  260.  
  261. Delete          delete -> DELETE FROM rec_alias where_clause;
  262.  
  263. InsertField     insert -> INSERT INTO rec_alias '(' field_list ')' icond;
  264. Insert             insert -> INSERT INTO rec_alias icond;
  265.  
  266. Update          update -> UPDATE rec_alias set_show where_clause;
  267.  
  268. RecAlias        rec_alias -> path;
  269. RecAliasPath    rec_alias -> path alias;
  270.  
  271. ICondFrom       icond -> FROM filename;
  272. ICondSelect     icond -> select_statement;
  273. ICondValues     icond -> VALUES '(' const_list ')';
  274.  
  275. SetShow         set_show -> SHOW setelements;
  276. SetShowSet      set_show -> SET setelements;
  277.  
  278. SetElementsOne  setelements -> setelement;
  279. SetElements     setelements -> setelements ',' setelement;
  280.  
  281. SetElementExpr  setelement -> field EQ expr %prec ASSIGN;
  282. SetElementSel   setelement -> field EQ select_statement %prec ASSIGN;
  283. SetElementEq    setelement -> '[' field_list ']' EQ '[' expr_list ']' %prec ASSIGN;
  284. SetElementEqSel setelement -> '[' field_list ']' EQ select_statement %prec ASSIGN;
  285.  
  286. Select          select -> select_expr order_clause into_clause;
  287.  
  288. SelectExprStat  select_expr -> select_statement;
  289. SelectExprUnion select_expr -> select_expr UNION any select_statement;
  290. SelectExprMinus select_expr -> select_expr MINUS select_statement;
  291. SelectExprDiv   select_expr -> select_expr DIVIDEBY select_statement;
  292. SelectExprInter select_expr -> select_expr INTERSECT select_statement;
  293. SelectExprNest  select_expr -> '(' select_expr ')';
  294.  
  295. OrderClauseNull order_clause -> ;
  296. OrderClause     order_clause -> ORDER BY norder_list;
  297.  
  298. IntoClauseNull     into_clause -> ;
  299. IntoClause      into_clause -> INTO filename;
  300.  
  301. SelectStat      select_statement -> select_clause FROM
  302.                          from_item_list select_options;
  303.  
  304. OrderListOne    order_list -> path orderdir %prec PORD;
  305. OrderList       order_list -> order_list ',' path orderdir;
  306.  
  307. NOrderListOne   norder_list -> expr orderdir %prec PORD;
  308. NOrderList      norder_list -> norder_list ',' norder_list;
  309.  
  310. SelectClause    select_clause -> SELECT unique sellist;
  311. SelectClauseUn  select_clause -> SELECT unique '*';
  312.  
  313. FromItListOne   from_item_list -> from_item;
  314. FromItemList    from_item_list -> from_item_list ',' from_item_list;
  315.  
  316. FromItemRec     from_item -> rec_alias;
  317. FromItemOut     from_item -> OUTER rec_alias;
  318. FromItemOutLst  from_item -> OUTER '(' from_item_list ')';
  319.  
  320. SelectOptionsNu select_options -> ;
  321. SelectOptWPred  select_options -> WHERE predicate;
  322. SelectOptWPG    select_options -> WHERE predicate group_clause;
  323. SelectOptGroup  select_options -> group_clause;
  324.  
  325. GroupClause     group_clause -> GROUP BY path_list;
  326. GroupClauseHav  group_clause -> GROUP BY path_list HAVING predicate;
  327.  
  328. UniqueNill      unique -> ;
  329. UniqueAll       unique -> ALL;
  330. UniqueDistinct  unique -> DISTINCT;
  331. UniqueUnique    unique -> UNIQUE;
  332.  
  333. SelListOne      sellist -> selelement;
  334. SelList         sellist -> sellist ',' selelement;
  335.  
  336. SelEleRec       selelement -> record ALLFIELDS;
  337. SelEleExpr      selelement -> expr;
  338. SelEleExStr     selelement -> expr STRING;
  339.  
  340. PredCond        predicate -> condition;
  341. PredCondAnd     predicate -> condition AND predicate;
  342. PredCondOr      predicate -> condition OR predicate;
  343. PredCondNot     predicate -> NOT predicate %prec '~';
  344. PredCondParen   predicate -> '(' predicate ')';
  345. PredCondIf      predicate -> IF predicate THEN predicate else_pred;
  346.  
  347. ElsePredNull     else_pred -> ;
  348. ElsePred        else_pred -> ELSE predicate;
  349.  
  350. CondExpr        condition -> expr;
  351. CondExprNotIn   condition -> expr not IN in_sel_expr;
  352. CondExprPath    condition -> '[' path_list ']'  not IN in_sel_expr;
  353. CondExprNulln   condition -> expr IS not NULLN;
  354. CondExprDef     condition -> expr IS not DEFAULT;
  355. CondExprBetw    condition -> expr not BETWEEN expr AND expr;
  356. CondExprLike    condition -> expr not LIKE const;
  357. CondExprExists  condition -> EXISTS '(' select_statement ')';
  358.  
  359. NotNull         not -> ;
  360. Not             not -> NOT;
  361.  
  362. AnyNull         any -> ;
  363. AnyAll          any -> ALL;
  364. Any             any -> ANY;
  365.  
  366. InSelExpr       in_sel_expr -> '(' select_statement ')';
  367. InSelExprConst  in_sel_expr -> const_recs;
  368.  
  369. CondSel         cond_sel_expr -> expr;
  370. CondSelSel      cond_sel_expr -> '(' select_statement ')';
  371.  
  372. ConstRecs       const_recs -> '(' const_list ')';
  373. ConstRecsList   const_recs -> '[' const_rec_list ']';
  374.  
  375. ConstRecListOne const_rec_list -> '(' const_list ')';
  376. ConstRecList    const_rec_list -> const_rec_list ',' '(' const_list ')';
  377.  
  378. PathListOne     path_list -> path;
  379. PathList        path_list -> path_list ',' path;
  380.  
  381. FieldListOne    field_list -> field;
  382. FieldList       field_list -> field_list ',' field;
  383.  
  384. Path            path -> path_e_list;
  385. PathEle         path -> path_e_list '[' element_name ']';
  386.  
  387. PathEleOne      path_e_list -> path_element;
  388. PathEleList     path_e_list -> path_element '.' path_e_list;
  389.  
  390. ElementName     element_name -> norder_list;
  391.  
  392. OrderDirNull    orderdir -> ;
  393. OrderDirDesc    orderdir -> DESC;
  394. OrderDirAsc     orderdir -> ASC;
  395.  
  396. ConstListOne    const_list -> const;
  397. ConstList       const_list -> const_list ',' const;
  398.  
  399. ExprSemantic    expr -> expr '`' s_control;
  400. ExprUnaryMinus  expr -> '-' expr %prec UMINUS;
  401. ExprPlus        expr -> expr '+' expr;
  402. ExprMinus       expr -> expr '-' expr;
  403. ExprMult        expr -> expr '*' expr;
  404. ExprDiv         expr -> expr '/' expr;
  405. ExprMod         expr -> expr '%' expr;
  406. ExprPwr         expr -> expr '**' expr;
  407. ExprCond        expr -> expr '?' else_part;
  408. ExprComp        expr -> '~' expr;
  409. ExprRShift      expr -> expr '>>' expr;
  410. ExprLShift      expr -> expr '<<' expr;
  411. ExprXor         expr -> expr '^' expr;
  412. ExprOr          expr -> expr '|' expr;
  413. ExprAnd         expr -> expr '&' expr;
  414. ExprLogOr       expr -> expr '||' expr;
  415. ExprLogAnd      expr -> expr '&&' expr;
  416. ExprCondNLT     expr -> expr '!<' cond_sel_expr;
  417. ExprCondNGT     expr -> expr '!>' cond_sel_expr;
  418. ExprCondLT      expr -> expr '<' any cond_sel_expr;
  419. ExprCondGT      expr -> expr '>' any cond_sel_expr;
  420. ExprCondEQ      expr -> expr '=' any cond_sel_expr;
  421. ExprCondGE      expr -> expr '>=' cond_sel_expr;
  422. ExprCondLE      expr -> expr '<=' cond_sel_expr;
  423. ExprCondNE      expr -> expr '!=' any cond_sel_expr;
  424. ExprCondParen   expr -> '(' expr ')';
  425. ExprConst       expr -> const;
  426. ExprPath        expr -> path;
  427. ExprFunction    expr -> function;
  428.  
  429. ElsePart        else_part -> expr ':' expr %prec TCOL;
  430.  
  431. ConstInteger    const -> INTEGER;
  432. ConstReal       const -> REAL;
  433. ConstString     const -> STRING;
  434. ConstDefault    const -> DEFAULT;
  435. ConstNulln      const -> NULLN;
  436. ConstParm       const -> PARM;
  437.  
  438. FunctionStar    function -> fname '(' '*' ')';
  439. FunctionExpr    function -> fname '(' expr_list ')';
  440. FunctionUnique  function -> fname '(' UNIQUE path ')';
  441.  
  442. ExprListOne     expr_list -> expr;
  443. ExprList        expr_list -> expr_list ',' expr;
  444.  
  445. CreateTable     create -> CREATE cluster TABLE path tfd_list with_clause;
  446. CreateView      create -> CREATE VIEW view_name vfd
  447.                                       AS select_statement with_clause;
  448. CreateFragment  create -> CREATE FRAGMENT view_name vfd
  449.                                       AS select_statement with_clause;
  450. CreateSnapshot  create -> CREATE SNAPSHOT view_name vfd
  451.                                       AS select_statement with_clause;
  452. CreateSynonym   create -> CREATE SYNONYM syn_name FOR path;
  453. CreateIndex     create -> CREATE unique cluster INDEX index_name
  454.                                       ON path '(' order_list ')' with_clause;
  455. CreateDatabase  create -> CREATE DATABASE dbname TYPE dbtype
  456.                                       ON hname with_clause;
  457. CreateDomain    create -> CREATE DOMAIN domain_name_list
  458.                                       IS domain_types defaults domain_restrict;
  459. CreateType      create -> CREATE TYPE type_name IS;
  460. CreateConstr    create -> CREATE CONSTRAINT constr_name trigger_list
  461.                                       CHECK predicate;
  462.  
  463. AlterList       alter -> ALTER TABLE path alter_list with_clause;
  464. AlterPath       alter -> ALTER TABLE path path with_clause;
  465.  
  466. DropIndex       drop -> DROP INDEX index_name;
  467. Drop            drop -> DROP object_type path;
  468.  
  469. Comment         comment -> COMMENT ON path;
  470. CommentIs       comment -> COMMENT ON path IS comment_str;
  471.  
  472. Info            info -> INFO;
  473.  
  474. CommentStrOne   comment_str -> STRING;
  475. CommentStrList  comment_str -> STRING ',' STRING;
  476.  
  477. TriggerListOne  trigger_list -> trigger;
  478. TriggerList     trigger_list -> trigger_list ',' trigger;
  479.  
  480. TriggerAt       trigger -> AT event;
  481. TriggerAfter    trigger -> AFTER event OF path FROM path;
  482. TriggerBefore   trigger -> BEFORE event OF path FROM path;
  483.  
  484. EventCommit     event -> COMMIT;
  485. EventDelete     event -> DELETE;
  486. EventInsert     event -> INSERT;
  487. EventUpdate     event -> UPDATE;
  488.  
  489. IndexName       index_name -> path;
  490.  
  491. ClusterNull     cluster -> ;
  492. Cluster           cluster -> IDENTIFIER;
  493.  
  494. ViewName        view_name -> record;
  495. ViewNameUser    view_name -> user '.' record;
  496.  
  497. WithClauseNull  with_clause -> ;
  498. WithClause      with_clause -> WITH option_list;
  499.  
  500. OptionListOne   option_list -> option;
  501. OptionList      option_list -> option ',' option_list;
  502.  
  503. OptionId        option -> IDENTIFIER;
  504. OptionIdId      option -> IDENTIFIER IDENTIFIER;
  505. OptionIdEq      option -> IDENTIFIER EQ const;
  506.  
  507. TfdListPrim     tfd_list -> primary_key foreign_keys field_dis;
  508.  
  509. FieldDis        field_dis -> '(' tfd_fields ')';
  510.  
  511. PrimaryNull     primary_key -> ;
  512. Primary         primary_key -> PRIMARY '(' primary_keys ')';
  513.  
  514. PrimaryListOne  primary_keys -> field;
  515. PrimaryList     primary_keys -> primary_keys ',' field;
  516.  
  517. ForeignListNull foreign_keys -> ;
  518. ForeignList     foreign_keys -> foreign_keys foreign_key;
  519.  
  520. ForeignKey      foreign_key -> FOREIGN '(' f_key IDENTIFIES path
  521.                          nulls DELETE OF path effect UPDATE OF path effect ')';
  522.  
  523. NullsAllowed    nulls -> NULLS ALLOWED;
  524. NullsNAllowed   nulls -> NULLS NOT ALLOWED;
  525.  
  526. TfdFieldsOne    tfd_fields -> tfd;
  527. TfdFieldsList   tfd_fields -> tfd_fields ',' tfd;
  528.  
  529. TfdField        tfd -> field o_domain_name;
  530. TfdFieldList    tfd -> field '(' field_list ')' o_domain_name;
  531.  
  532. DomainNull      o_domain_name -> ;
  533. Domain          o_domain_name -> domain_name;
  534.  
  535. TypeName        type_name -> IDENTIFIER;
  536.  
  537. DomNameListOne  domain_name_list -> domain_name;
  538. DomNameList     domain_name_list -> domain_name_list ',' domain_name;
  539.  
  540. DomTypeOne      domain_types -> domain_type;
  541. DomTypeList     domain_types -> '(' domain_type_list ')';
  542.  
  543. DefaultsNull    defaults -> ;
  544. Defaults        defaults -> DEFAULT;
  545.  
  546. DomRestrWhere   domain_restrict -> where_clause;
  547. DomRestrSelect  domain_restrict -> select_statement;
  548.  
  549. DomListNull     domain_type_list -> ;
  550. DomList         domain_type_list -> domain_type_list ',' domain_type;
  551.  
  552. DomainTypeName  domain_type -> type_name;
  553. DomainTypeNameL domain_type -> type_name '(' i_list ')';
  554.  
  555. IListOne        i_list -> INTEGER;
  556. IList           i_list -> i_list ',' INTEGER;
  557.  
  558. VfdNull         vfd -> ;
  559. Vfd             vfd -> '(' vfd_list ')';
  560.  
  561. VfdListOne      vfd_list -> field;
  562. VfdList         vfd_list -> vfd_list ',' field;
  563.  
  564. AlterListOne    alter_list -> alteration;
  565. AlterList0      alter_list -> alter_list ',' alteration;
  566.  
  567. AlterAdd        alteration -> ADD '(' a_tfd_fields ')';
  568. AlterDrop       alteration -> DROP vfd;
  569. AlterModify     alteration -> MODIFY '(' m_tfd_fields ')';
  570.  
  571. ATfdFieldsOne   a_tfd_fields -> tfd before;
  572. ATfdFieldsList  a_tfd_fields -> a_tfd_fields ',' tfd before;
  573.  
  574. MTfdFieldsOne   m_tfd_fields -> field tfd;
  575. MTfdFields      m_tfd_fields -> m_tfd_fields ',' field tfd;
  576.  
  577. BeforeNull      before -> ;
  578. Before          before -> BEFORE field;
  579.  
  580. Effect          effect -> IDENTIFIER;
  581.  
  582. ObjectDatabase  object_type -> DATABASE;
  583. ObjectDomain    object_type -> DOMAIN;
  584. ObjectProgram   object_type -> PROGRAM;
  585. ObjectSynonym   object_type -> SYNONYM;
  586. ObjectType      object_type -> TYPE;
  587. ObjectTable     object_type -> TABLE;
  588. ObjectView      object_type -> VIEW;
  589.  
  590. Grant           grant -> GRANT privileges gr_on TO users
  591.                          at_option between_option on_option where_option wgo;
  592.  
  593. AtOptNull       at_option -> ;
  594. AtOpt           at_option -> AT terminal_list;
  595.  
  596. BetweenOptNull  between_option -> ;
  597. BetweenOpt      between_option -> BETWEEN time1 AND time2;
  598.  
  599. OnOptNull       on_option -> ;
  600. OnOpt           on_option -> ON day1 AND day2;
  601.  
  602. WhereOptNull    where_option -> ;
  603. WhereOpt        where_option -> WHERE predicate;
  604.  
  605. WgoNull         wgo -> ;
  606. Wgo             wgo -> WITH GRANT OPTION;
  607.  
  608. TermListOne     terminal_list -> tty;
  609. TermList        terminal_list -> tty ',' terminal_list;
  610.  
  611. Revoke          revoke -> REVOKE privileges gr_on FROM users;
  612.  
  613. PrivNull        privileges -> ;
  614. PrivOne         privileges -> privileg;
  615. PrivList        privileges -> privileges ',' privileg;
  616.  
  617. Priv            privileg -> priv_name;
  618. PrivFields      privileg -> priv_name '(' field_list ')';
  619.  
  620. GrOnNull        gr_on -> ;
  621. GrOn            gr_on -> ON object_type objects;
  622.  
  623. UserOne         users -> user;
  624. UserList        users -> users ',' user;
  625.  
  626. ObjectsOne      objects -> IDENTIFIER;
  627. Objects         objects -> objects ',' IDENTIFIER;
  628.  
  629. Lock            lock -> LOCK TABLE path IN mode MODE;
  630.  
  631. Begin           begin -> BBEGIN work;
  632.  
  633. Commit          commit -> COMMIT work;
  634.  
  635. Rollback        rollback -> ROLLBACK work;
  636. RollbackSync     rollback -> ROLLBACK SYNC;
  637.  
  638. Rollforward     rollforward -> ROLLFORWARD path FROM path roll_op;
  639.  
  640. RollOpNull      roll_op -> ;
  641. RollOp          roll_op -> TO STRING time;
  642.  
  643. TimeNull             time -> ;
  644. Time                 time -> STRING;
  645.  
  646. Sync                 sync -> SYNC;
  647.  
  648. WorkNull             work -> ;
  649. Work                 work -> WORK;
  650.  
  651. Close                 close -> CLOSE dbname;
  652.  
  653. Open                 open -> OPEN dbname password;
  654.  
  655. Password             password -> IDENTIFIER;
  656.  
  657. Audit                 audit -> AUDIT into_clause path_list
  658.                          from_clause where_clause;
  659.  
  660. Check                  check -> CHECK;
  661.  
  662. Dump                dump -> DUMP DATABASE dbname to_clause;
  663. DumpTable         dump -> DUMP TABLE dbname to_clause;
  664.  
  665. Repair             repair -> REPAIR;
  666.  
  667. Restore             restore -> RESTORE DATABASE dbname rfrom_clause;
  668. RestoreTable     restore -> RESTORE TABLE dbname rfrom_clause;
  669.  
  670. ToClauseNull     to_clause -> ;
  671. ToClause             to_clause -> TO filename;
  672.  
  673. RFromClauseNull rfrom_clause -> ;
  674. RFromClause         rfrom_clause -> FROM filename;
  675.  
  676. Set                 set -> SET option_list;
  677.  
  678. WhereClauseNull where_clause -> ;
  679. WhereClause         where_clause -> WHERE predicate;
  680.  
  681. FromClauseNull  from_clause -> ;
  682. FromClause         from_clause -> FROM path_list;
  683.  
  684. Mode                mode -> IDENTIFIER;
  685.  
  686. PrivNameId        priv_name -> IDENTIFIER;
  687. PrivNameAlter     priv_name -> ALTER;
  688. PrivNameCreate     priv_name -> CREATE;
  689. PrivNameDelete     priv_name -> DELETE;
  690. PrivNameDump     priv_name -> DUMP;
  691. PrivNameRestore priv_name -> RESTORE;
  692. PrivNameDrop     priv_name -> DROP;
  693. PrivNameInsert     priv_name -> INSERT;
  694. PrivNameLock     priv_name -> LOCK;
  695. PrivNameSelect     priv_name -> SELECT;
  696. PrivNameUpdate     priv_name -> UPDATE;
  697.  
  698. SControl            s_control         -> IDENTIFIER;
  699. AliasId             alias              -> IDENTIFIER;
  700. ConstrName       constr_name     -> IDENTIFIER;
  701. Day1                day1             -> IDENTIFIER;
  702. Day2                day2             -> IDENTIFIER;
  703. DbType             dbtype             -> PARM;
  704. DbTypeId            dbtype             -> IDENTIFIER;
  705. DbNameParm         dbname             -> PARM;
  706. DbNameId            dbname             -> IDENTIFIER;
  707. DomainName      domain_name     -> IDENTIFIER;
  708. FieldName         field             -> IDENTIFIER;
  709. Filename            filename         -> PARM;
  710. FilenameId      filename         -> IDENTIFIER;
  711. Fname             fname             -> IDENTIFIER;
  712. FKey                f_key             -> IDENTIFIER;
  713. HName                hname             -> IDENTIFIER;
  714. ParmName            parm_name         -> IDENTIFIER;
  715. PathElement         path_element     -> IDENTIFIER;
  716. ProgName            prog_name         -> IDENTIFIER;
  717. Record             record             -> IDENTIFIER;
  718. SynName             syn_name         -> IDENTIFIER;
  719. Tty                 tty                 -> IDENTIFIER;
  720. Time1                time1             -> IDENTIFIER;
  721. Time2                time2             -> IDENTIFIER;
  722. User                user             -> PARM;
  723. UserId             user             -> IDENTIFIER;
  724.  
  725. String          STRING             -> stringList STRINGEND;
  726. StringList      stringList        -> stringList STRINGPART;
  727. StringListOne   stringList    -> STRINGPART;
  728.  
  729.