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

📄 parse.y

📁 firebird源代码
💻 Y
📖 第 1 页 / 共 5 页
字号:
						$1, $2, $4, $6); }			| '(' joined_view_table ')'				{ $$ = $2; }			;/* these rules will capture the input string for storage in metadata */begin_string	: 			{ beginning = lex_position(); }		;end_string	:			{ $$ = (NOD) MAKE_string ((UCHAR *) beginning, 			       (lex_position() == end) ?			       lex_position()-beginning : last_token-beginning);}		;begin_trigger	: 			{ beginning = last_token; }		;end_trigger	:			{ $$ = (NOD) MAKE_string ((UCHAR *) beginning, 					lex_position()-beginning); }		;check_opt	: WITH CHECK OPTION			{ $$ = make_node (nod_def_constraint, (int) e_cnstr_count, 					MAKE_string (NULL_STRING, 0), NULL, NULL, NULL, 					NULL, NULL, NULL, NULL, NULL); }		|			{ $$ = 0; }		;/* CREATE TRIGGER */def_trigger_clause : symbol_trigger_name FOR simple_table_name		trigger_active		trigger_type		trigger_position		begin_trigger		trigger_action		end_trigger			{ $$ = make_node (nod_def_trigger, (int) e_trg_count,				$1, $3, $4, $5, $6, $8, $9, NULL); }		;trigger_active	: ACTIVE 			{ $$ = MAKE_constant ((STR) 0, CONSTANT_SLONG); }		| INACTIVE			{ $$ = MAKE_constant ((STR) 1, CONSTANT_SLONG); }		|			{ $$ = NULL; }		;trigger_type	: BEFORE INSERT			{ $$ = MAKE_constant ((STR) 1, CONSTANT_SLONG); }		| AFTER INSERT			{ $$ = MAKE_constant ((STR) 2, CONSTANT_SLONG); }		| BEFORE UPDATE			{ $$ = MAKE_constant ((STR) 3, CONSTANT_SLONG); }		| AFTER UPDATE			{ $$ = MAKE_constant ((STR) 4, CONSTANT_SLONG); }		| BEFORE DELETE			{ $$ = MAKE_constant ((STR) 5, CONSTANT_SLONG); }		| AFTER DELETE			{ $$ = MAKE_constant ((STR) 6, CONSTANT_SLONG); }		;trigger_position : POSITION nonneg_short_integer			{ $$ = MAKE_constant ((STR) $2, CONSTANT_SLONG); }		|			{ $$ = NULL; }		;trigger_action : AS begin_trigger var_declaration_list full_proc_block			{ $$ = make_node (nod_list, 2, $3, $4); }		;/* ALTER statement */alter		: ALTER alter_clause			{ $$ = $2; }                ; alter_clause	: EXCEPTION symbol_exception_name sql_string			{ $$ = make_node (nod_mod_exception, (int) e_xcp_count, 						$2, $3); }		| TABLE simple_table_name alter_ops			{ $$ = make_node (nod_mod_relation, (int) e_alt_count, 						$2, make_list ($3)); }		| TRIGGER alter_trigger_clause			{ $$ = $2; }		| PROCEDURE alter_procedure_clause			{ $$ = $2; }		| DATABASE init_alter_db alter_db			{ $$ = make_node (nod_mod_database, (int) e_adb_count,				make_list ($3)); }                | DOMAIN alter_column_name alter_domain_ops                        { $$ = make_node (nod_mod_domain, (int) e_alt_count,                                          $2, make_list ($3)); }		| INDEX alter_index_clause                        { $$ = make_node (nod_mod_index, 				     (int) e_mod_idx_count, $2); }		;domain_default_opt2	: DEFAULT begin_trigger default_value				{ $$ = $3; }domain_check_constraint2 	: CHECK begin_trigger '(' 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); }                                ;alter_domain_ops	: alter_domain_op			| alter_domain_ops alter_domain_op			  { $$ = make_node (nod_list, 2, $1, $2); }			;alter_domain_op		: SET begin_trigger domain_default_opt2 end_trigger                          { $$ = make_node (nod_def_default, (int) e_dft_count,					    $3, $4); }              /*			SET begin_string default_opt end_trigger                          { $$ = make_node (nod_def_default, (int) e_dft_count,					    $3, $4); }                        | begin_trigger default_opt end_trigger                          { $$ = make_node (nod_def_default, (int) e_dft_count,					    $2, $3); }              */                        | ADD CONSTRAINT domain_check_constraint2                          { $$ = $3; } /*                        | ADD CONSTRAINT domain_check_constraint                          { $$ = $3; }                         */                        | ADD domain_check_constraint                          { $$ = $2; } 			| DROP DEFAULT                          {$$ = make_node (nod_del_default, (int) 0, NULL); }			| DROP CONSTRAINT                          { $$ = make_node (nod_delete_rel_constraint, (int) 1, NULL); }			| TO simple_column_name			  { $$ = $2; }			| TYPE init_data_type non_array_type 			  { $$ = make_node (nod_mod_domain_type, 2, $2); }			;alter_ops	: alter_op		| alter_ops ',' alter_op			{ $$ = make_node (nod_list, 2, $1, $3); }		;alter_op	: DROP simple_column_name drop_behaviour			{ $$ = make_node (nod_del_field, 2, $2, $3); }                | DROP CONSTRAINT symbol_constraint_name                        { $$ = make_node (nod_delete_rel_constraint, (int) 1, $3);}		| ADD column_def			{ $$ = $2; }                | ADD table_constraint_definition                        { $$ = $2; }/* CVC: From SQL, field positions start at 1, not zero. Think in ORDER BY, for example.		| col_opt simple_column_name POSITION nonneg_short_integer			{ $$ = make_node (nod_mod_field_pos, 2, $2,				MAKE_constant ((STR) $4, CONSTANT_SLONG)); } */		| col_opt simple_column_name POSITION pos_short_integer			{ $$ = make_node (nod_mod_field_pos, 2, $2,				MAKE_constant ((STR) $4, CONSTANT_SLONG)); }		| col_opt alter_column_name TO simple_column_name			{ $$ = make_node (nod_mod_field_name, 2, $2, $4); }		| col_opt alter_col_name TYPE alter_data_type_or_domain end_trigger 			{ $$ = make_node (nod_mod_field_type, 3, $2, $5, $4); } 		;alter_column_name  : keyword_or_column		   { $$ = make_node (nod_field_name, (int) e_fln_count,						NULL, $1); }		   ;	keyword_or_column	: COLUMN			| TYPE			| EXTRACT			| YEAR			| MONTH			| DAY			| HOUR			| MINUTE			| SECOND			| WEEKDAY			| YEARDAY			| TIME			| TIMESTAMP			| CURRENT_DATE			| CURRENT_TIME			| CURRENT_TIMESTAMP			| CURRENT_USER /* CVC: Added the following except SYMBOL. */			| CURRENT_ROLE			| SYMBOL			| KW_BREAK			| SUBSTRING			| KW_DESCRIPTOR			;col_opt		: ALTER		    { $$ = NULL; }		| ALTER COLUMN		    { $$ = NULL; }		;alter_data_type_or_domain	: non_array_type begin_trigger                          		{ $$ = NULL; }				| simple_column_name begin_string                          		{ $$ = make_node (nod_def_domain, (int) e_dom_count,                                        	    $1, NULL, NULL, NULL, NULL); }alter_col_name	: simple_column_name			{ field_name = $1;			  field = make_field ($1);			  $$ = (NOD) field; }drop_behaviour	: RESTRICT			{ $$ = make_node (nod_restrict, 0, NULL); }		| CASCADE			{ $$ = make_node (nod_cascade, 0, NULL); }		|			{ $$ = make_node (nod_restrict, 0, NULL); }		;alter_index_clause	: symbol_index_name ACTIVE				{ $$ = make_node (nod_idx_active, 1, $1); }			| symbol_index_name INACTIVE				{ $$ = make_node (nod_idx_inactive, 1, $1); }			;/* ALTER DATABASE */init_alter_db	: 			{ log_defined = FALSE;			  cache_defined = FALSE;			  $$ = (NOD) NULL; }		;alter_db	: db_alter_clause		| alter_db db_alter_clause		    	{ $$ = make_node (nod_list, (int) 2, $1, $2); }		;db_alter_clause : ADD db_file_list			{ $$ = $2; }/*		| ADD db_cache			{ $$ = $2; }                | DROP CACHE			{ $$ = make_node (nod_drop_cache, (int) 0, NULL); }*/		| DROP LOGFILE			{ $$ = make_node (nod_drop_log, (int) 0, NULL); }		| SET  db_log_option_list			{ $$ = $2; }		| ADD db_log			{ $$ = $2; }		;db_log_option_list : db_log_option		   | db_log_option_list ',' db_log_option		    	{ $$ = make_node (nod_list, (int) 2, $1, $3); }		   ;/* ALTER TRIGGER */alter_trigger_clause : symbol_trigger_name trigger_active		new_trigger_type		trigger_position		begin_trigger		new_trigger_action		end_trigger			{ $$ = make_node (nod_mod_trigger, (int) e_trg_count,				$1, NULL, $2, $3, $4, $6, $7, NULL); }		;new_trigger_type : trigger_type		|			{ $$ = NULL; }		;new_trigger_action : trigger_action		|			{ $$ = NULL; }		;/* DROP metadata operations */                drop		: DROP drop_clause			{ $$ = $2; }                ; drop_clause	: EXCEPTION symbol_exception_name			{ $$ = make_node (nod_del_exception, 1, $2); }		| INDEX symbol_index_name			{ $$ = make_node (nod_del_index, (int) 1, $2); }		| PROCEDURE symbol_procedure_name			{ $$ = make_node (nod_del_procedure, (int) 1, $2); }		| TABLE symbol_table_name			{ $$ = make_node (nod_del_relation, (int) 1, $2); }		| TRIGGER symbol_trigger_name			{ $$ = make_node (nod_del_trigger, (int) 1, $2); }		| VIEW symbol_view_name			{ $$ = make_node (nod_del_view, (int) 1, $2); }		| FILTER symbol_filter_name			{ $$ = make_node (nod_del_filter, (int) 1, $2); }		| DOMAIN symbol_domain_name			{ $$ = make_node (nod_del_domain, (int) 1, $2); }		| EXTERNAL FUNCTION symbol_UDF_name			{ $$ = make_node (nod_del_udf, (int) 1, $3); }		| SHADOW pos_short_integer			{ $$ = make_node (nod_del_shadow, (int) 1, $2); }		| ROLE symbol_role_name			{ $$ = make_node (nod_del_role, (int) 1, $2); }		| GENERATOR symbol_generator_name			{ $$ = make_node (nod_del_generator, (int) 1, $2); }		;/* these are the allowable datatypes */data_type	: non_array_type		| array_type		;non_array_type	: simple_type		| blob_type		;array_type	: non_charset_simple_type '[' array_spec ']'		    { field->fld_ranges = make_list ($3);		      field->fld_dimensions = field->fld_ranges->nod_count / 2;		      field->fld_element_dtype = field->fld_dtype;		      $$ = $1; }		| character_type '[' array_spec ']' charset_clause		    { field->fld_ranges = make_list ($3);		      field->fld_dimensions = field->fld_ranges->nod_count / 2;		      field->fld_element_dtype = field->fld_dtype;		      $$ = $1; }		;array_spec	: array_range 		| array_spec ',' array_range 			{ $$ = make_node (nod_list, (int) 2, $1, $3); }		;array_range	: signed_long_integer	    		{ if ((SLONG) $1 < 1)		     		$$ = make_node (nod_list, (int) 2, 					MAKE_constant ((STR) $1, CONSTANT_SLONG), 					MAKE_constant ((STR) 1, CONSTANT_SLONG)); 		          else		     		$$ = make_node (nod_list, (int) 2, 			   		MAKE_constant ((STR) 1, CONSTANT_SLONG), 					MAKE_constant ((STR) $1, CONSTANT_SLONG) ); }		| signed_long_integer ':' signed_long_integer		    	{ $$ = make_node (nod_list, (int) 2, 			 	MAKE_constant ((STR) $1, CONSTANT_SLONG),				MAKE_constant ((STR) $3, CONSTANT_SLONG)); }		;simple_type	: non_charset_simple_type		| character_type charset_clause		;non_charset_simple_type	: national_character_type		| numeric_type		| float_type		| integer_keyword			{ 			field->fld_dtype = dtype_long; 			field->fld_length = sizeof (SLONG); 			}		| SMALLINT			{ 			field->fld_dtype = dtype_short; 			field->fld_length = sizeof (SSHORT); 			}		| DATE			{ 			*stmt_ambiguous = TRUE;			if (client_dialect <= SQL_DIALECT_V5)			    {			    /* Post warning saying that DATE is equivalent to TIMESTAMP */		            ERRD_post_warning (isc_sqlwarn, gds_arg_number, (SLONG) 301,                                                isc_arg_warning, isc_dtype_renamed, 0);			    field->fld_dtype = dtype_timestamp; 			    field->fld_length = sizeof (GDS_TIMESTAMP);			    }			else if (client_dialect == SQL_DIALECT_V6_TRANSITION)			    yyabandon (-104, isc_transitional_date);			else			    {			    field->fld_dtype = dtype_sql_date; 			    field->fld_length = sizeof (ULONG);			    }			}		| TIME			{ 			if (client_dialect < SQL_DIALECT_V6_TRANSITION)			    ERRD_post (gds__sqlerr, gds_arg_number, (SLONG) -104, 				    gds_arg_gds, isc_sql_dialect_datatype_unsupport,				    gds_arg_number, client_dialect,				    gds_arg_string, "TIME",				    0);			if (db_dialect < SQL_DIALECT_V6_TRANSITION)			    ERRD_post (gds__sqlerr, gds_arg_number, (SLONG) -104, 				    gds_arg_gds, isc_sql_db_dialect_dtype_unsupport,				    gds_arg_number, db_dialect,				    gds_arg_string, "TIME",				    0);			field->fld_dtype = dtype_sql_time; 			field->fld_length = sizeof (SLONG);			}		| TIMESTAMP			{ 			field->fld_dtype = dtype_timestamp; 			field->fld_length = sizeof (GDS_TIMESTAMP);			}		;integer_keyword	: INTEGER			| KW_INT		;/* allow a blob to be specified with any combination of    segment length and subtype */blob_type	: BLOB blob_subtype blob_segsize charset_clause			{ 			field->fld_dtype = dtype_blob; 			}		| BLOB '(' unsigned_short_integer ')'			{ 			field->fld_dtype = dtype_blob; 			field->fld_seg_length = (SLONG) $3;			field->fld_sub_type = 0;			}		| BLOB '(' unsigned_short_integer ',' signed_short_integer ')'			{ 			field->fld_dtype = dtype_blob; 			field->fld_seg_length = (SLONG) $3;			field->fld_sub_type = (SLONG) $5;			}		| BLOB '(' ',' signed_short_integer ')'			{ 			field->fld_dtype = dtype_blob; 			field->fld_seg_length = 80;			field->fld_sub_type = (SLONG) $4;			}		;blob_segsize	: SEGMENT SIZE unsigned_short_integer		  	{			field->fld_seg_length = (SLONG) $3;		  	}		|		  	{			field->fld_seg_length = (SLONG) 80;		  	}		;blob_subtype	: SUB_TYPE signed_short_integer			{			field->fld_sub_type = (SLONG) $2;			}		| SUB_TYPE symbol_blob_subtype_name			{			field->fld_sub_type_name = $2;			}		|			{			field->fld_sub_type = (SLONG) 0;			}		;charset_clause	: CHARACTER SET symbol_character_set_name			{			field->fld_character_set = $3;			}		|		;/* character type */national_character_type	: national_character_keyword '(' pos_short_integer ')'			{ 			field->fld_dtype = dtype_text; 			field->fld_character_length = (SLONG) $3; 			field->fld_flags |= FLD_national;			}		| national_character_keyword			{ 			field->fld_dtype = dtype_text; 			field->fld_character_length = 1; 			field->fld_flags |= FLD_national;			}		| national_character_keyword VARYING '(' pos_short_integer ')'			{ 			field->fld_dtype = dtype_varying; 			field->fld_character_length = (SLONG) $4; 			field->fld_flags |= FLD_national;			}		;character_type	: character_keyword '(' pos_short_integer ')'			{ 			field->fld_dtype = dtype_text; 			field->fld_character_length = (SLONG) $3; 			}		| character_keyword			{ 			field->fld_dtype = dtype_text; 			field->fld_character_length = 1; 			}

⌨️ 快捷键说明

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