⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parse.y

📁 firebird源代码
💻 Y
📖 第 1 页 / 共 5 页
字号:
/* CREATE TABLE */table_clause	: simple_table_name external_file '(' table_elements ')'			{ $$ = make_node (nod_def_relation, 				(int) e_drl_count, $1, make_list ($4), $2); }		;rtable_clause	: simple_table_name external_file '(' table_elements ')'			{ $$ = make_node (nod_redef_relation, 				(int) e_drl_count, $1, make_list ($4), $2); }		;external_file	: EXTERNAL KW_FILE sql_string			{ $$ = $3; }		| EXTERNAL sql_string			{ $$ = $2; }		|			{ $$ = (NOD) NULL; }		;table_elements	: table_element		| table_elements ',' table_element			{ $$ = make_node (nod_list, 2, $1, $3); }		;table_element	: column_def		| table_constraint_definition		;/* column definition */column_def	: column_def_name data_type_or_domain default_opt 			end_trigger column_constraint_clause collate_clause			{ $$ = make_node (nod_def_field, (int) e_dfl_count, 					$1, $3, $4, make_list ($5), $6, $2, NULL); }   		| column_def_name non_array_type def_computed			{ $$ = make_node (nod_def_field, (int) e_dfl_count, 				    $1, NULL, NULL, NULL, NULL, NULL, $3); }   		| column_def_name def_computed			{ $$ = make_node (nod_def_field, (int) e_dfl_count, 				    $1, NULL, NULL, NULL, NULL, NULL, $2); }   		;                                 /* value does allow parens around it, but there is a problem getting the * source text */def_computed	: computed_by '(' begin_trigger value end_trigger ')'			{ 			field->fld_flags |= FLD_computed;			$$ = make_node (nod_def_computed, 2, $4, $5); }		;computed_by	: COMPUTED BY		| COMPUTED		;data_type_or_domain	: data_type begin_trigger                          { $$ = NULL; }			| simple_column_name begin_string                          { $$ = make_node (nod_def_domain, (int) e_dom_count,                                            $1, NULL, NULL, NULL, NULL); }                        ;collate_clause	: COLLATE symbol_collation_name			{ $$ = $2; }		|			{ $$ = (NOD) NULL; }		;column_def_name	: column_name			{ field_name = $1;			  field = make_field ($1);			  $$ = (NOD) field; }		;simple_column_def_name  : simple_column_name				{ field = make_field ($1);				  $$ = (NOD) field; }			;data_type_descriptor :	init_data_type data_type			{ $$ = $1; }init_data_type :			{ field = make_field (NULL);			  $$ = (NOD) field; }default_opt	: DEFAULT default_value			{ $$ = $2; }		|			{ $$ = (NOD) NULL; }		;default_value	: constant			{ $$ = $1; }/*		| USER			{ $$ = make_node (nod_user_name, (int) 0, NULL); }		| CURRENT_USER			{ $$ = make_node (nod_user_name, (int) 0, NULL); }*/		| current_user		| current_role		| null_value			{ $$ = $1; }		| datetime_value_expression			{ $$ = $1; }		;column_constraint_clause : 				{ $$ = (NOD) NULL; }			| column_constraint_list			;column_constraint_list	: column_constraint_def		        | column_constraint_list column_constraint_def			{ $$ = make_node (nod_list, (int) 2, $1, $2); }		        ;column_constraint_def : constraint_name_opt column_constraint            { $$ = make_node (nod_rel_constraint, (int) 2, $1, $2);}column_constraint : NOT KW_NULL                         { $$ = make_node (nod_null, (int) 1, NULL); }                  | REFERENCES simple_table_name column_parens_opt			referential_trigger_action                        { $$ = make_node (nod_foreign, e_for_count,                        make_node (nod_list, (int) 1, field_name), $2, $3, $4); }                  | check_constraint                  | UNIQUE                        { $$ = make_node (nod_unique, (int) 0, NULL); }                  | PRIMARY KEY                        { $$ = make_node (nod_primary, (int) 0, NULL); }		;                    /* table constraints */table_constraint_definition : constraint_name_opt table_constraint           { $$ = make_node (nod_rel_constraint, (int) 2, $1, $2);}                      ;constraint_name_opt : CONSTRAINT symbol_constraint_name                      { $$ = $2; }                    | { $$ = NULL ;}                    ;table_constraint : unique_constraint		 | primary_constraint		 | referential_constraint		 | check_constraint		 ;unique_constraint : UNIQUE column_parens                    { $$ = make_node (nod_unique, 1, $2); }                  ;primary_constraint : PRIMARY KEY column_parens			{ $$ = make_node (nod_primary, e_pri_count, $3); }		;referential_constraint 	: FOREIGN KEY column_parens REFERENCES 			  simple_table_name column_parens_opt 			  referential_trigger_action			{ $$ = make_node (nod_foreign, e_for_count, $3, $5, 			         $6, $7); }		;check_constraint : begin_trigger CHECK '(' search_condition ')' end_trigger			{ $$ = make_node (nod_def_constraint, 				(int) e_cnstr_count, MAKE_string (NULL_STRING, 0), NULL, 				NULL, NULL, $4, NULL, $6, NULL, NULL); }		;referential_trigger_action:			  update_rule		  { $$ = make_node (nod_ref_upd_del, e_ref_upd_del_count, $1, NULL);} 		| delete_rule		  { $$ = make_node (nod_ref_upd_del, e_ref_upd_del_count, NULL, $1);}		| delete_rule update_rule		  { $$ = make_node (nod_ref_upd_del, e_ref_upd_del_count, $2, $1); }		| update_rule delete_rule		  { $$ = make_node (nod_ref_upd_del, e_ref_upd_del_count, $1, $2);}		| /* empty */		  { $$ = NULL;}		;update_rule	: ON UPDATE referential_action		  { $$ = $3;}		;delete_rule	: ON DELETE referential_action		  { $$ = $3;}		;referential_action: CASCADE		  { $$ = make_flag_node (nod_ref_trig_action, 			 REF_ACTION_CASCADE, e_ref_trig_action_count, NULL);}                | SET DEFAULT		  { $$ = make_flag_node (nod_ref_trig_action, 			 REF_ACTION_SET_DEFAULT, e_ref_trig_action_count, NULL);}		| SET KW_NULL		  { $$ = make_flag_node (nod_ref_trig_action, 			 REF_ACTION_SET_NULL, e_ref_trig_action_count, NULL);}		| NO ACTION		  { $$ = make_flag_node (nod_ref_trig_action, 			 REF_ACTION_NONE, e_ref_trig_action_count, NULL);}		;/* PROCEDURE */procedure_clause	: symbol_procedure_name input_parameters		     	  output_parameters		    	  AS begin_string			  var_declaration_list			  full_proc_block			  end_trigger				{ $$ = make_node (nod_def_procedure,						  (int) e_prc_count, 					          $1, $2, $3, $6, $7, $8, NULL); } 		;        rprocedure_clause	: symbol_procedure_name input_parameters		     	  output_parameters		    	  AS begin_string			  var_declaration_list			  full_proc_block			  end_trigger				{ $$ = make_node (nod_redef_procedure,						  (int) e_prc_count, 					          $1, $2, $3, $6, $7, $8, NULL); } 		;        alter_procedure_clause	: symbol_procedure_name input_parameters		     	  output_parameters		    	  AS begin_string			  var_declaration_list			  full_proc_block			  end_trigger				{ $$ = make_node (nod_mod_procedure,						  (int) e_prc_count, 					          $1, $2, $3, $6, $7, $8, NULL); } 		;        input_parameters :	'(' proc_parameters ')'				{ $$ = make_list ($2); }			|				{ $$ = NULL; }			;output_parameters :	RETURNS input_parameters				{ $$ = $2; }			|				{ $$ = NULL; }			;proc_parameters	: proc_parameter		| proc_parameters ',' proc_parameter			{ $$ = make_node (nod_list, 2, $1, $3); }		;proc_parameter	: simple_column_def_name non_array_type			{ $$ = make_node (nod_def_field, (int) e_dfl_count, 				$1, NULL, NULL, NULL, NULL, NULL, NULL); }   		;var_declaration_list	: var_declarations				{ $$ = make_list ($1); }			|				{ $$ = NULL; }			;var_declarations	: var_declaration			| var_declarations var_declaration			{ $$ = make_node (nod_list, 2, $1, $2); }		;var_declaration : DECLARE VARIABLE column_def_name non_array_type ';'			{ $$ = make_node (nod_def_field, (int) e_dfl_count, 				$3, NULL, NULL, NULL, NULL, NULL, NULL); }   		;proc_block	: proc_statement		| full_proc_block		;full_proc_block	: BEGIN		  proc_statements		  END			{ $$ = make_node (nod_block, e_blk_count,					make_list ($2), NULL);}		| BEGIN		  proc_statements		  excp_statements		  END			{ $$ = make_node (nod_block, e_blk_count,					make_list ($2), make_list ($3));}		;proc_statements	: proc_block		| proc_statements proc_block			{ $$ = make_node (nod_list, 2, $1, $2); }		;proc_statement	: assignment ';'		| delete ';'		| EXCEPTION symbol_exception_name ';'			{ $$ = make_node (nod_exception_stmt, 1, $2); }		| exec_procedure		| exec_sql		| for_select		| if_then_else		| insert ';'		| POST_EVENT value ';'			{ $$ = make_node (nod_post, e_pst_count, $2); }		| singleton_select		| update ';'		| while		| SUSPEND ';'			{ $$ = make_node (nod_return, e_rtn_count, NULL); }		| EXIT ';'			{ $$ = make_node (nod_exit, 0, NULL); }		| KW_BREAK ';'			{ $$ = make_node (nod_breakleave, e_break_count, NULL); }		;exec_procedure	: EXECUTE PROCEDURE symbol_procedure_name proc_inputs proc_outputs ';'			{ $$ = make_node (nod_exec_procedure, e_exe_count, $3,					  $4, $5); }		;exec_sql	: EXECUTE VARCHAR value ';'			{ $$ = make_node (nod_exec_sql, e_exec_vc_count, $3); }		;		for_select	: FOR select INTO variable_list cursor_def DO proc_block			{ $$ = make_node (nod_for_select, e_flp_count, $2,					  make_list ($4), $5, $7, NULL); }		;if_then_else	: IF '(' search_condition ')' THEN proc_block ELSE proc_block			{ $$ = make_node (nod_if, e_if_count, $3, $6, $8); }		| IF '(' search_condition ')' THEN proc_block 			{ $$ = make_node (nod_if, e_if_count, $3, $6, NULL); }		;singleton_select	: select INTO variable_list ';'			{ $$ = make_node (nod_for_select, e_flp_count, $1,					  make_list ($3), NULL, NULL); }		;variable	: ':' symbol_variable_name			{ $$ = make_node (nod_var_name, (int) e_vrn_count, 							$2); }		;proc_inputs	: var_const_list			{ $$ = make_list ($1); }		| '(' var_const_list ')'			{ $$ = make_list ($2); }		|			{ $$ = NULL; }		;proc_outputs	: RETURNING_VALUES variable_list			{ $$ = make_list ($2); }		| RETURNING_VALUES '(' variable_list ')'			{ $$ = make_list ($3); }		|			{ $$ = NULL; }		;var_const_list	: variable		| constant 		| column_name 		| null_value		| var_const_list ',' variable			{ $$ = make_node (nod_list, 2, $1, $3); }		| var_const_list ',' constant			{ $$ = make_node (nod_list, 2, $1, $3); }		| var_const_list ',' column_name			{ $$ = make_node (nod_list, 2, $1, $3); }		| var_const_list ',' null_value			{ $$ = make_node (nod_list, 2, $1, $3); }		;variable_list	: variable 		| column_name		| variable_list ',' column_name			{ $$ = make_node (nod_list, 2, $1, $3); }		| variable_list ',' variable			{ $$ = make_node (nod_list, 2, $1, $3); }		;while		: WHILE '(' search_condition ')' DO proc_block			{ $$ = make_node (nod_while, e_while_count,					  $3, $6, NULL); }		;cursor_def	: AS CURSOR symbol_cursor_name			{ $$ = make_node (nod_cursor, e_cur_count, $3, NULL, NULL); }		|			{ $$ = NULL; }		;excp_statements	: excp_statement		| excp_statements excp_statement			{ $$ = make_node (nod_list, 2, $1, $2); }		;excp_statement	: WHEN errors DO proc_block			{ $$ = make_node (nod_on_error, e_err_count,					make_list ($2), $4); }		;errors	: err	| errors ',' err		{ $$ = make_node (nod_list, 2, $1, $3); }	;err	: SQLCODE signed_short_integer		{ $$ = make_node (nod_sqlcode, 1, $2); }	| GDSCODE symbol_gdscode_name		{ $$ = make_node (nod_gdscode, 1, $2); }	| EXCEPTION symbol_exception_name		{ $$ = make_node (nod_exception, 1, $2); }	| ANY		{ $$ = make_node (nod_default, 1, NULL); }	;/* Direct EXECUTE PROCEDURE */invoke_procedure : EXECUTE PROCEDURE symbol_procedure_name prc_inputs			{ $$ = make_node (nod_exec_procedure, e_exe_count, $3,				  $4, make_node (nod_all, (int) 0, NULL)); }		;prc_inputs	: prm_const_list			{ $$ = make_list ($1); }		| '(' prm_const_list ')'			{ $$ = make_list ($2); }		|			{ $$ = NULL; }		;prm_const_list	: parameter		| constant		| null_value		| prm_const_list ',' parameter			{ $$ = make_node (nod_list, 2, $1, $3); }		| prm_const_list ',' constant			{ $$ = make_node (nod_list, 2, $1, $3); }		| prm_const_list ',' null_value			{ $$ = make_node (nod_list, 2, $1, $3); }		;/* CREATE VIEW */view_clause	: symbol_view_name column_parens_opt AS begin_string union_view                                                             check_opt end_string			{ $$ = make_node (nod_def_view, (int) e_view_count, 					  $1, $2, $5, $6, $7); }   		;        /*rview_clause	: symbol_view_name column_parens_opt AS begin_string union_view                                                             check_opt end_string			{ $$ = make_node (nod_redef_view, (int) e_view_count, 					  $1, $2, $5, $6, $7); }   		;        */union_view      : union_view_expr			{ $$ = make_node (nod_select, (int) 2, $1, NULL); }		;union_view_expr	: select_view_expr			{ $$ = make_node (nod_list, (int) 1, $1); }		| union_view_expr UNION select_view_expr			{ $$ = make_node (nod_list, 2, $1, $3); }                | union_view_expr UNION ALL select_view_expr                        { $$ = make_flag_node (nod_list, NOD_UNION_ALL, 2, $1, $4); }		;select_view_expr: SELECT limit_clause			 distinct_clause			 select_list 			 from_view_clause 			 where_clause 			 group_clause 			 having_clause			 plan_clause			{ $$ = make_node (nod_select_expr, e_sel_count, 					$2, $3, $4, $5, $6, $7, $8, $9, NULL); }		;                                               from_view_clause : FROM from_view_list		 	{ $$ = make_list ($2); }		;from_view_list	: view_table		| from_view_list ',' view_table			{ $$ = make_node (nod_list, 2, $1, $3); }		;view_table      : joined_view_table                | table_name                ;joined_view_table	: view_table join_type JOIN view_table ON search_condition				{ $$ = make_node (nod_join, (int) e_join_count,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -