?? sql1.y
字號:
/* symbolic tokens */%union { int intval; double floatval; char *strval; int subtok;} %token NAME%token STRING%token INTNUM APPROXNUM /* operators */%left OR%left AND%left NOT%left <subtok> COMPARISON /* = <> < > <= >= */%left '+' '-'%left '*' '/'%nonassoc UMINUS /* literal keyword tokens */%token ALL AMMSC ANY AS ASC AUTHORIZATION BETWEEN BY%token CHARACTER CHECK CLOSE COMMIT CONTINUE CREATE CURRENT%token CURSOR DECIMAL DECLARE DEFAULT DELETE DESC DISTINCT DOUBLE%token ESCAPE EXISTS FETCH FLOAT FOR FOREIGN FOUND FROM GOTO%token GRANT GROUP HAVING IN INDICATOR INSERT INTEGER INTO%token IS KEY LANGUAGE LIKE MODULE NULLX NUMERIC OF ON%token OPEN OPTION ORDER PRECISION PRIMARY PRIVILEGES PROCEDURE%token PUBLIC REAL REFERENCES ROLLBACK SCHEMA SELECT SET%token SMALLINT SOME SQLCODE SQLERROR TABLE TO UNION%token UNIQUE UPDATE USER VALUES VIEW WHENEVER WHERE WITH WORK%token COBOL FORTRAN PASCAL PLI C ADA%%sql_list: sql ';' | sql_list sql ';' ; /* schema definition language */ /* Note: other ``sql:'' rules appear later in the grammar */sql: schema ; schema: CREATE SCHEMA AUTHORIZATION user opt_schema_element_list ;opt_schema_element_list: /* empty */ | schema_element_list ;schema_element_list: schema_element | schema_element_list schema_element ;schema_element: base_table_def | view_def | privilege_def ;base_table_def: CREATE TABLE table '(' base_table_element_commalist ')' ;base_table_element_commalist: base_table_element | base_table_element_commalist ',' base_table_element ;base_table_element: column_def | table_constraint_def ;column_def: column data_type column_def_opt_list ;column_def_opt_list: /* empty */ | column_def_opt_list column_def_opt ;column_def_opt: NOT NULLX | NOT NULLX UNIQUE | NOT NULLX PRIMARY KEY | DEFAULT literal | DEFAULT NULLX | DEFAULT USER | CHECK '(' search_condition ')' | REFERENCES table | REFERENCES table '(' column_commalist ')' ;table_constraint_def: UNIQUE '(' column_commalist ')' | PRIMARY KEY '(' column_commalist ')' | FOREIGN KEY '(' column_commalist ')' REFERENCES table | FOREIGN KEY '(' column_commalist ')' REFERENCES table '(' column_commalist ')' | CHECK '(' search_condition ')' ;column_commalist: column | column_commalist ',' column ;view_def: CREATE VIEW table opt_column_commalist AS query_spec opt_with_check_option ; opt_with_check_option: /* empty */ | WITH CHECK OPTION ;opt_column_commalist: /* empty */ | '(' column_commalist ')' ;privilege_def: GRANT privileges ON table TO grantee_commalist opt_with_grant_option ;opt_with_grant_option: /* empty */ | WITH GRANT OPTION ;privileges: ALL PRIVILEGES | ALL | operation_commalist ;operation_commalist: operation | operation_commalist ',' operation ;operation: SELECT | INSERT | DELETE | UPDATE opt_column_commalist | REFERENCES opt_column_commalist ;grantee_commalist: grantee | grantee_commalist ',' grantee ;grantee: PUBLIC | user ; /* module language */sql: module_def ;module_def: MODULE opt_module LANGUAGE lang AUTHORIZATION user opt_cursor_def_list procedure_def_list ;opt_module: /* empty */ | module ;lang: COBOL | FORTRAN | PASCAL | PLI | C | ADA ;opt_cursor_def_list: /* empty */ | cursor_def_list ;cursor_def_list: cursor_def | cursor_def_list cursor_def ;cursor_def: DECLARE cursor CURSOR FOR query_exp opt_order_by_clause ;opt_order_by_clause: /* empty */ | ORDER BY ordering_spec_commalist ;ordering_spec_commalist: ordering_spec | ordering_spec_commalist ',' ordering_spec ;ordering_spec: INTNUM opt_asc_desc | column_ref opt_asc_desc ;opt_asc_desc: /* empty */ | ASC | DESC ;procedure_def_list: procedure_def | procedure_def_list procedure_def ;procedure_def: PROCEDURE procedure parameter_def_list ';' manipulative_statement_list ;manipulative_statement_list: manipulative_statement | manipulative_statement_list manipulative_statement ;parameter_def_list: parameter_def | parameter_def_list parameter_def ;parameter_def: parameter data_type | SQLCODE ; /* manipulative statements */sql: manipulative_statement ;manipulative_statement: close_statement | commit_statement | delete_statement_positioned | delete_statement_searched | fetch_statement | insert_statement | open_statement | rollback_statement | select_statement | update_statement_positioned | update_statement_searched ;close_statement: CLOSE cursor ;commit_statement: COMMIT WORK ;delete_statement_positioned: DELETE FROM table WHERE CURRENT OF cursor ;delete_statement_searched: DELETE FROM table opt_where_clause ;fetch_statement: FETCH cursor INTO target_commalist ;insert_statement: INSERT INTO table opt_column_commalist values_or_query_spec ;values_or_query_spec: VALUES '(' insert_atom_commalist ')' | query_spec ;insert_atom_commalist: insert_atom | insert_atom_commalist ',' insert_atom ;insert_atom: atom | NULLX ;open_statement: OPEN cursor ;rollback_statement: ROLLBACK WORK ;select_statement: SELECT opt_all_distinct selection INTO target_commalist table_exp ;opt_all_distinct: /* empty */ | ALL | DISTINCT ;update_statement_positioned: UPDATE table SET assignment_commalist WHERE CURRENT OF cursor ;assignment_commalist: | assignment | assignment_commalist ',' assignment ;assignment: column '=' scalar_exp | column '=' NULLX ;update_statement_searched: UPDATE table SET assignment_commalist opt_where_clause ;target_commalist: target | target_commalist ',' target ;target: parameter_ref ;opt_where_clause: /* empty */ | where_clause ; /* query expressions */query_exp: query_term | query_exp UNION query_term | query_exp UNION ALL query_term ;query_term: query_spec | '(' query_exp ')' ;query_spec: SELECT opt_all_distinct selection table_exp ;selection: scalar_exp_commalist | '*' ;table_exp: from_clause opt_where_clause opt_group_by_clause opt_having_clause ;from_clause: FROM table_ref_commalist ;table_ref_commalist: table_ref | table_ref_commalist ',' table_ref ;table_ref: table | table range_variable ;where_clause: WHERE search_condition ;opt_group_by_clause: /* empty */ | GROUP BY column_ref_commalist ;column_ref_commalist: column_ref | column_ref_commalist ',' column_ref ;opt_having_clause: /* empty */ | HAVING search_condition ; /* search conditions */search_condition: | search_condition OR search_condition | search_condition AND search_condition | NOT search_condition | '(' search_condition ')' | predicate ;predicate: comparison_predicate | between_predicate | like_predicate | test_for_null | in_predicate | all_or_any_predicate | existence_test ;comparison_predicate: scalar_exp COMPARISON scalar_exp | scalar_exp COMPARISON subquery ;between_predicate: scalar_exp NOT BETWEEN scalar_exp AND scalar_exp | scalar_exp BETWEEN scalar_exp AND scalar_exp ;like_predicate: scalar_exp NOT LIKE atom opt_escape | scalar_exp LIKE atom opt_escape ;opt_escape: /* empty */ | ESCAPE atom ;test_for_null: column_ref IS NOT NULLX | column_ref IS NULLX ;in_predicate: scalar_exp NOT IN '(' subquery ')' | scalar_exp IN '(' subquery ')' | scalar_exp NOT IN '(' atom_commalist ')' | scalar_exp IN '(' atom_commalist ')' ;atom_commalist: atom | atom_commalist ',' atom ;all_or_any_predicate: scalar_exp COMPARISON any_all_some subquery ; any_all_some: ANY | ALL | SOME ;existence_test: EXISTS subquery ;subquery: '(' SELECT opt_all_distinct selection table_exp ')' ; /* scalar expressions */scalar_exp: scalar_exp '+' scalar_exp | scalar_exp '-' scalar_exp | scalar_exp '*' scalar_exp | scalar_exp '/' scalar_exp | '+' scalar_exp %prec UMINUS | '-' scalar_exp %prec UMINUS | atom | column_ref | function_ref | '(' scalar_exp ')' ;scalar_exp_commalist: scalar_exp | scalar_exp_commalist ',' scalar_exp ;atom: parameter_ref | literal | USER ;parameter_ref: parameter | parameter parameter | parameter INDICATOR parameter ;function_ref: AMMSC '(' '*' ')' | AMMSC '(' DISTINCT column_ref ')' | AMMSC '(' ALL scalar_exp ')' | AMMSC '(' scalar_exp ')' ;literal: STRING | INTNUM | APPROXNUM ; /* miscellaneous */table: NAME | NAME '.' NAME ;column_ref: NAME | NAME '.' NAME /* needs semantics */ | NAME '.' NAME '.' NAME ; /* data types */data_type: CHARACTER | CHARACTER '(' INTNUM ')' | NUMERIC | NUMERIC '(' INTNUM ')' | NUMERIC '(' INTNUM ',' INTNUM ')' | DECIMAL | DECIMAL '(' INTNUM ')' | DECIMAL '(' INTNUM ',' INTNUM ')' | INTEGER | SMALLINT | FLOAT | FLOAT '(' INTNUM ')' | REAL | DOUBLE PRECISION ; /* the various things you can name */column: NAME ;cursor: NAME ;module: NAME ;parameter: ':' NAME ;procedure: NAME ;range_variable: NAME ;user: NAME ; /* embedded condition things */sql: WHENEVER NOT FOUND when_action | WHENEVER SQLERROR when_action ;when_action: GOTO NAME | CONTINUE ;%%
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -