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

📄 bug.y

📁 开放源码的编译器open watcom 1.6.0版的源代码
💻 Y
📖 第 1 页 / 共 4 页
字号:
tblelmtlist:	createclause
		    {T( $$ = pa_table_element( NULL, $1 ); )}
	    |	tblelmtlist  T_COMMA  createclause
		    {T( $$ = pa_table_element( $1, $3 ); )}
	    ;

createclause:	coldefn
		    {T( $$.ptr = $1;
		      $$.info = PI_COLDEFN;
		    )}
	    |	T_UNIQUE  T_LPAREN collist  T_RPAREN
		    {  pa_specific( L_PACE );
		    T( $$.info = PI_UNIQUE;
		       $$.ptr = $3;
		    )}
	    |	T_PRIMARY  T_KEY  T_LPAREN collist  T_RPAREN
		    {  pa_specific( L_PACE );
		    T( $$.info = PI_PRIMARYKEY;
		       $$.ptr = $4;
		    )}
	    |	rolename  notnull  T_FOREIGN  T_KEY  T_FOR
		tabname fgnkeycols checkclause
		    {  pa_specific( L_PACE );
		    T( $$.info = PI_FOREIGNKEY;
		       $$.ptr = pa_foreign_key( $1, $2, $8, $6, $7 );
		    )}
	    |	rolename  notnull  T_FOREIGN  T_KEY  rolename  notnull 
	        fgnkeycols  T_REFERENCES  tabname
		    {  pa_specific( L_PACE ); }
	    ;

coldefn:	colname  data_type  notnull  unique
		    {T( $$ = pa_coldefn( $1, $2, !$3, $4 ); )}
	    ;

notnull:	/* empty */
		    {T( $$ = FALSE; )}
	    |	T_NOT  T_NULL
		    {T( $$ = TRUE; )}
	    ;

checkclause:	T_CHECK  T_ON  T_COMMIT
		    {T( $$ = TRUE; )}
	    |	/* empty */
		    {T( $$ = FALSE; )}
	    ;

rolename:	/* empty */
		    {T( $$ = NULL; )}
	    |	colname
	    ;

fgnkeycols:	/* empty */
		    {T( $$ = NULL; )}
	    |	T_LPAREN  fgnkeycollist  optcomma  T_RPAREN
		    {T( $$ = $2; )}
	    ;

fgnkeycollist:	fgnkeycol
		    {T( $$ = pa_iadd_plist( NULL, $1 ); )}
	    |	fgnkeycollist  T_COMMA  fgnkeycol
		    {T( $$ = pa_iadd_plist( $1, $3 ); )}
	    ;

fgnkeycol:	colname  T_IS  colname
		    {T( $$ = pa_foreign_key_column( $1, $3 ); )}
	    ;

createindex:	T_CREATE  unique  T_INDEX  indexname  T_ON  tabname
		T_LPAREN indexlist  T_RPAREN
		    {T( $$ = pa_create_index( $2, $4, $6, $8 ); )}
	    ;

unique: 	/* empty */
		    {T( $$ = FALSE; )}
	    |	T_UNIQUE
		    {T( $$ = TRUE; )}
	    ;

indexlist:	indexlistrev  optcomma
		    {T( $$ = pa_reverse_plist( $1 ); )}
	    ;

indexlistrev:	indexcol
		    {T( $$ = pa_iadd_plist( NULL, $1 ); )}
	    |	indexlistrev  T_COMMA  indexcol
		    {T( $$ = pa_iadd_plist( $1, $3 ); )}
	    ;

indexcol:	colname  indexattrlist
		    {T( $$ = pa_index_column( $1, $2 ); )}
	    ;

indexattrlist:	/* empty */
	            { $$ = IA_ASC; }
            |	indexattrlist1
	            { $$ = $1; }
	    ;

indexattrlist1:	indexattr
	            { $$ = $1; }
	    |	indexattrlist1  indexattr
	    	    { $$ = ( $1 | $2 );
		      if( ($$ & IA_ASC)  &&  ($$ & IA_DESC)){
		          sql_errors( SQLE_SYNTAX_ERROR, "DESC" );
		      }
		    }
	    ;

indexattr:	T_ASC
	    	    { $$ = IA_ASC; }
            |   T_DESC
	            { $$ = IA_DESC; }
	    ;

createview:	T_CREATE  T_VIEW  tabname  columns  T_AS  query_expr
		    {T( $$ = pa_create_view( $3, $4, $6 ); )}
	    ;

alter:		T_ALTER  T_TABLE  tabname  alter_clause
		    {T( $$ = pa_alter_table( $3, $4 ); )}
	    ;

alter_clause:	T_ADD  createclause
		    {T( $$ = pa_alter_clause( AC_ADD, $2, NULL ); )}
	    |	T_MODIFY  modcoldefn
		    {  a_parser_info	i;
		       pa_specific( L_PACE | L_XQL );
		    T( i.info = PI_COLDEFN;
		       i.ptr = $2;
		       $$ = pa_alter_clause( AC_MODIFY, i, NULL );
		    )}
	    |	alter_delete  colname
		    {  a_parser_info	i;
		       pa_specific( L_XQL | L_PACE );
		    T( i.info = PI_COLDEFN;
		       i.ptr = pa_coldefn( $2, NULL, FALSE, FALSE );
		       $$ = pa_alter_clause( AC_DELETE, i, NULL );
		    )}
	    |	alter_delete  T_FOREIGN  T_KEY  T_IDENTIFIER
		    {  a_parser_info	i;
		       pa_specific( L_PACE );
		    T( i.info = PI_FOREIGNKEY;
		       i.ptr = $4;
		       $$ = pa_alter_clause( AC_DELETE_FKEY, i, NULL );
		    )}
	    |	alter_delete  T_PRIMARY  T_KEY
		    {  a_parser_info	i;
		       pa_specific( L_PACE );
		    T( i.info = PI_PRIMARYKEY;
		       $$ = pa_alter_clause( AC_DELETE_PKEY, i, NULL );
		    )}
	    |	T_RENAME  T_IDENTIFIER
		    {  a_parser_info	i;
		       pa_specific( L_PACE );
		    T( i.info = PI_NONE;
		       i.ptr = $2;
		       $$ = pa_alter_clause( AC_NEWNAME, i, NULL );
		    )}
	    |	T_RENAME  T_IDENTIFIER	T_TO  T_IDENTIFIER
		    {  a_parser_info	i;
		       pa_specific( L_PACE );
		    T( i.info = PI_NONE;
		       i.ptr = $2;
		       $$ = pa_alter_clause( AC_RENAME, i, $4 );
		    )}
	    ;

alter_delete:	T_DELETE
	    |	T_DROP
	    ;

modcoldefn:	coldefn
	    |	colname  T_NOT	T_NULL
		    {T( $$ = pa_coldefn( $1,
				       pa_data_type( DT_NOTYPE, 0L, 0 ),
				       FALSE, FALSE ); )}
	    |	colname  T_NULL
		    {T( $$ = pa_coldefn( $1,
				       pa_data_type( DT_NOTYPE, 0L, 0 ),
				       TRUE, FALSE ); )}
	    ;

data_type:	char_type  T_LPAREN  integer  T_RPAREN   
		    {T( $$ = pa_data_type( $1, ((an_integer *)$3)->value, 0 );)}
    	    |   char_type
		    {T( $$ = pa_data_type( $1, 1L, 0 ); )}
	    |	T_LONG	T_VARCHAR
		    {T( $$ = pa_data_type( DT_LONGVARCHAR, -1L, 0 ); )}
	    |	integer_type
		    {T( $$ = pa_data_type( $1, 0L, 0 ); )}
	    |	exact_num_type	T_LPAREN  integer  T_COMMA  integer  T_RPAREN
		    {T( $$ = pa_data_type( $1,
				 ((an_integer *)$3)->value,
				 (unsigned short)((an_integer *)$5)->value ); )}
	    |	exact_num_type	T_LPAREN  integer  T_RPAREN
		    {T( $$ = pa_data_type( $1, ((an_integer *)$3)->value, 0 );)}
	    |	exact_num_type
		    {T( $$ = pa_data_type( $1, -1L, 0 ); )}
	    |	float_type
		    {T( $$ = pa_data_type( $1, 0L, 0 ); )}
	    |	float_type  T_LPAREN  integer  T_RPAREN
		    {T( $$ = pa_data_type( $1, ((an_integer *)$3)->value, 0 );)}
	    |	T_DATE
		    {T( $$ = pa_data_type( DT_DATE, 0L, 0 ); )}
	    ;

char_type:	T_CHAR
		    {T( $$ = DT_FIXCHAR; )}
	    |	T_VARCHAR
		    {T( $$ = DT_VARCHAR; )}
	    ;

integer_type:	T_INTEGER
		    {T( $$ = DT_INT; )}
	    |	T_SMALLINT
		    {T( $$ = DT_SMALLINT; )}
	    ;

exact_num_type: T_DECIMAL
		    {T( $$ = DT_DECIMAL; )}
	    |	T_NUMERIC
		    {T( $$ = DT_DECIMAL; )}
	    ;

float_type: 	T_FLOAT
		    {T( $$ = DT_FLOAT; )}
	    |	T_REAL
		    {T( $$ = DT_FLOAT; )}
	    |	T_DOUBLE
		    {T( $$ = DT_DOUBLE; )}
	    |	T_DOUBLE  T_PRECISION
		    {T( $$ = DT_DOUBLE; )}
	    ;

number: 	T_NUMBER
		    {T( $$ = pa_number( $1 ); )}
	    |   T_LONGINT
		    {T( $$ = pa_integer( $1 ); )}
	    ;

integer:	T_LONGINT
		    { $$ = pa_integer( $1 ); }
	    ;

commenton:      T_COMMENT  T_ON  T_TABLE  tabname  T_IS  runid_spec
		    { pa_specific( L_SAA ); }
	    |	T_COMMENT  T_ON  T_COLUMN  colref  T_IS  runid_spec
		    { pa_specific( L_SAA ); }
	    ;

lock:		T_LOCK  T_TABLE  tabname  T_IN  lockmode 
		    { pa_specific( L_SAA ); }
	    ;

lockmode:	T_SHARE
	    |	T_EXCLUSIVE
	    ;

droptable:	T_DROP	T_TABLE  tabname  
		    {T( $$ = pa_droptable( $3 ); )}
	    ;

dropindex:	T_DROP	T_INDEX  indexname  
		    {T( $$ = pa_dropindex( $3 ); )}
	    ;

dropview:	T_DROP	T_VIEW	tabname
		    {T( $$ = pa_dropview( $3 ); )}
	    ;

grant:		granttok  tableprivileges  T_ON  tabname
			T_TO  userlist	grantoption
		    {T( $$ = pa_grant( PRIVT_TABLE, (a_privilege)$2, $4,
				     update_collist, $6, $7 ); )}
	    /*
	    |	granttok  T_RUN  T_ON  progname  T_TO  userlist  grantoption
		    {  pa_specific( L_PACE );
		    T( $$ = pa_grant( PRIVT_RUN, (a_privilege)0, $4,
				     NULL, $6, $7 ); 
		    )}
	    */
	    |	granttok  specialpriv  T_TO  userlist  passwdlist
		    {  pa_specific( L_PACE | L_XQL );
		    T( $$ = pa_grant( PRIVT_SPECIAL, (a_privilege)$2, NULL,
				     $5, $4, FALSE ); 
		    )}
	    ;

granttok:	T_GRANT
		    {T( update_collist = NULL; )}
	    ;


tableprivileges:T_ALL
		    {T( $$ = PRIV_ALL; )}
	    |	T_ALL  T_PRIVILEGES
		    {  pa_specific( L_PACE );
		    T( $$ = PRIV_ALL; 
		    )}
	    |	tableprivlist  optcomma
	    ;

tableprivlist:	tablepriv
	    |	tableprivlist  T_COMMA  tablepriv
		    {T( $$ = ( $1 | $3 ); )}
	    ;

tablepriv:	T_ALTER
		    {T( $$ = PRIV_ALTER; )}
	    |	T_DELETE
		    {T( $$ = PRIV_DELETE; )}
	    |	T_INDEX
		    {T( $$ = PRIV_INDEX; )}
	    |	T_INSERT
		    {T( $$ = PRIV_INSERT; )}
	    |	T_SELECT  priv_columns
		    {  if( $2 != NULL ){
		 	   pa_specific( L_PACE | L_XQL );
		       }
		    T( $$ = PRIV_SELECT; )}
	    |	T_UPDATE  priv_columns
		    {  if( $2 != NULL ){
		 	   pa_specific( L_PACE | L_XQL );
		       }
		    T( if( $2 != NULL ){
			   $$ = PRIV_UPDATECOL;
		       }else{
			   $$ = PRIV_UPDATE;
		       }
		       update_collist = $2;
		    )}
	    ;

priv_columns:   columns
	    |	collist 
	    ;


specialpriv:	T_CONNECT
		    {T( $$ = PRIV_CONNECT; )}
	    |	T_DBA
		    {T( $$ = PRIV_DBA; )}
	    |	T_RESOURCE
		    {T( $$ = PRIV_RESOURCE; )}
	    |	T_SCHEDULE
		    {T( $$ = PRIV_SCHEDULE; )}
	    ;

grantoption:	/* empty */
		    {T( $$ = FALSE; )}
	    |	T_WITH	T_GRANT  T_OPTION
		    {T( $$ = TRUE; )}
	    ;

userlist:	userlistrev  optcomma
		    {T( $$ = pa_reverse_plist( $1 ); )}
	    ;

userlistrev:	userid
		    {T( $$ = pa_add_plist( NULL, $1 ); )}
	    |	userlistrev  T_COMMA  userid
		    {T( $$ = pa_add_plist( $1, $3 ); )}
	    ;

userid: 	T_IDENTIFIER
	    |	T_PUBLIC
		    {T( $$ = NULL; )}
	    ;


passwdlist:	/* empty */
		    {T( $$ = NULL; )}
	    |	T_IDENTIFIED  T_BY  passwdlistrev  optcomma
		    {T( $$ = pa_reverse_plist( $3 ); )}
	    ;

passwdlistrev:	password
		    {T( $$ = pa_add_plist( NULL, $1 ); )}
	    |	passwdlistrev  T_COMMA  password
		    {T( $$ = pa_add_plist( $1, $3 ); )}
	    ;

password:	T_IDENTIFIER
	    ;

revoke: 	revoketok  tableprivileges  T_ON  tabname  T_FROM  userlist
		    {T( $$ = pa_revoke( PRIVT_TABLE, (a_privilege)$2, $4,
				      update_collist,$6 );)}
	    /*
	    |	revoketok  T_RUN  T_ON	progname  T_FROM  userlist
		    {  pa_specific( L_PACE );
		    T( $$ = pa_revoke( PRIVT_RUN, (a_privilege)0, $4,
				      NULL, $6 ); 
		    )}
	    */
	    |	revoketok  specialpriv	T_FROM	userlist
		    {  pa_specific( L_PACE | L_XQL );
		    T( $$ = pa_revoke( PRIVT_SPECIAL, (a_privilege)$2, NULL,
				      NULL, $4 ); 
		    )}
	    ;

revoketok:	T_REVOKE
		    {T( update_collist = NULL; )}
	    ;

dbspacename:	T_IDENTIFIER
		    {T( $$ = pa_dbspace( NULL, $1 ); )}
	    |	T_IDENTIFIER  T_DOT  T_IDENTIFIER
		    {T( $$ = pa_dbspace( $1, $3 ); )}
	    ;

commit: 	T_COMMIT  T_WORK  T_RELEASE
		    { $$ = pa_commit( TRUE ); }
	    |	T_COMMIT  T_WORK
		    { $$ = pa_commit( FALSE ); }
	    |	T_COMMIT  
		    { $$ = pa_commit( FALSE ); }
	    ;

rollback:	T_ROLLBACK  T_WORK  T_RELEASE
		    { $$ = pa_rollback( TRUE ); }
	    |	T_ROLLBACK  T_WORK
		    { $$ = pa_rollback( FALSE ); }
	    |	T_ROLLBACK  
		    { $$ = pa_rollback( FALSE ); }
	    ;


sqlprogram:     stmt
            |   sqlprogram stmt
            ;

stmt:		validstmt  T_SEMI_COLON
		    { pa_end_instr( TRUE ); }
	    |   error  errortoklist  T_SEMI_COLON
		    { pa_end_instr( TRUE ); 
	    	      yyerrok; }
	    ;

validstmt:      execsql  embstmt 
            |   execsql  runstmt
	    ;

embstmt:	embsqlstmt
		    /* taken out because of garbage at the end of statement */
		    /* { pa_end_instr( TRUE ); } */
            ;

runstmt:	sqlstmt
		    { if( SQLStmt ){
		          pa_sqlstmt();
		      }
		    /* taken out because of garbage at the end of statement */
		      /* pa_end_instr( TRUE ); */
		    }
	    ;

errortoklist:	toklist
		    { if( SQLStmt ){
		          pa_sqlstmt();
		      }
		    /* taken out because of garbage at the end of statement */
		      /* pa_end_instr( TRUE ); */
		    }
	    ;

toklist:	/* empty */                
	    |   toklist  token
	    ;

token:		T_TOK
            |   hostvar  
            |   T_COMMA  
	    |   selinto2  
	    ;

execsql:	T_EXECSQL
		    { $$ = pa_start_instr(); 
		      SQLStmt = TRUE; 
		    }
	    ;
	     
embsqlstmt:     { SQLStmt = FALSE; }  close
            |   { SQLStmt = FALSE; }  connect
	    |	{ SQLStmt = FALSE; }  declarations
            |   { SQLStmt = FALSE; }  declare
            |   { SQLStmt = FALSE; }  describe
            |                         dropstmt
            |   { SQLStmt = FALSE; }  execute
            |   { SQLStmt = FALSE; }  fetch
	    |   { SQLStmt = FALSE; }  getoption
            |   { SQLStmt = FALSE; }  include
            |   { SQLStmt = FALSE; }  open
            |   { SQLStmt = FALSE; }  prepare
            |                         put
            |   { SQLStmt = FALSE; }  reopen

⌨️ 快捷键说明

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