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

📄 tinysql.cup

📁 有关JDBC的使用一些编程实例,有关与数据库连接的代码
💻 CUP
字号:
// JavaCup specification for SQL Grammar  

import java_cup.runtime.*;
import java.util.*;
import java.lang.*;
import java.io.*;

action code {:

Vector actions = new Vector();
Hashtable Statement = new Hashtable();

Vector value_list  = new Vector();
Vector foo = new Vector();
Vector column_list = new Vector();
Vector search_list = new Vector();

public void addAction (Vector v, String type) {
  
  Hashtable h = ( (Hashtable) Statement.clone() );
  h.put("TYPE", type);
  v.addElement(h);

  Statement.clear();
  value_list.removeAllElements();
  foo.removeAllElements();
  column_list.removeAllElements();
  search_list.removeAllElements();

}

public Vector getActions() {
  return actions;
}

:};

parser code {:

  InputStream parserInputStream;
  public parser(InputStream is) {
    this();
    parserInputStream = is;
  }

:};

init with {: scanner.init(parserInputStream); :};
scan with {: return scanner.next_token();     :};

terminal token INSERT, VALUES, COMMA, PERIOD, LPAREN, 
               RPAREN, INTO, SELECT, FROM, SEMI, CHARACTER,
	       NUMERIC, CREATE, TABLE, INTEGER, DROP, WHERE,
	       AND, SET, UPDATE, DELETE, ASTERISK;


terminal str_token NAME, INT_NUM, STRING, COMPARISON;

/* */
non terminal int_token insert_statement, select_statement, 
                       sql_statement, sql_batch, create_table_statement,
		       drop_table_statement, where_clause,
		       search_expr, search_condition, set_expr, 
		       update_statement, set_clause;

non terminal str_token column_commalist, column, values_clause, 
                       value, value_commalist, table, table_commalist,
                       column_def, column_def_commalist, delete_statement;

/* Grammar */

sql_batch        ::= sql_statement
                     |
		     sql_batch SEMI sql_statement
		     ;

sql_statement    ::= select_statement
                     |
		     insert_statement
		     |
		     create_table_statement
		     |
		     drop_table_statement
		     |
		     update_statement
		     |
		     delete_statement
		     ;

delete_statement ::= DELETE FROM table:s1
                     {: Statement.clear();
		        Statement.put("TABLE", s1.str_val); 
		     :}
		     where_clause 
		     {:
                        Statement.put("WHERE", (Vector) search_list.clone()); 
		        addAction(actions, "DELETE"); 
		     :}
		     ;

update_statement ::= UPDATE table:s1
                     {: Statement.clear();
		        Statement.put("TABLE", s1.str_val); 
		     :}
		     set_clause
                     {: Statement.put("COLUMNS", (Vector) foo.clone()); 
                        Statement.put("VALUES",  (Vector) value_list.clone()); 
	             :}
		     where_clause 
		     {:
                        Statement.put("WHERE", (Vector) search_list.clone()); 
		        addAction(actions, "UPDATE"); 
		     :}
		     ;

select_statement ::= SELECT column_commalist
                     {: Statement.clear();
                        Statement.put("COLUMNS", (Vector) foo.clone()); :}
		     FROM table_commalist
		     {:
                        Statement.put("TABLES", (Vector) foo.clone()); :}
		     where_clause 
		     {:
                        Statement.put("WHERE", (Vector) search_list.clone()); 
		        addAction(actions, "SELECT"); 
		     :}
		     ;


insert_statement ::= INSERT INTO table:s1 
                     {: Statement.clear();
		        Statement.put("TABLE", s1.str_val); :}
	             LPAREN column_commalist RPAREN 
                     {: Statement.put("COLUMNS", (Vector) foo.clone()); :}
		     values_clause
                     {: Statement.put("VALUES",  (Vector) value_list.clone()); 
		        addAction(actions, "INSERT"); 
		     :}
		     ;

drop_table_statement 
                 ::= DROP TABLE table:s1
                     {: Statement.clear();
		        Statement.put("TABLE", s1.str_val); 
			addAction(actions, "DROP_TABLE"); 
	             :}
	             ;

create_table_statement 
                 ::= CREATE TABLE table:s1
                     {: Statement.clear();
		        Statement.put("TABLE", s1.str_val); :}
                     LPAREN column_def_commalist RPAREN
                     {: 
		        Statement.put("COLUMN_DEF",  
			   (Vector) column_list.clone()); 
		        
			addAction(actions, "CREATE"); 
	             :}
	             ;


values_clause    ::= VALUES LPAREN value_commalist RPAREN
		     ;

value            ::= INT_NUM:s1
                     {: RESULT.str_val = s1.str_val; :}
		     |
		     STRING:s1
                     {: RESULT.str_val = s1.str_val; :}
		     ;

value_commalist  ::= value:s1
                     {: value_list.removeAllElements();
		        value_list.addElement(new String(s1.str_val)); 
		        RESULT.str_val = s1.str_val;
		     :}
		     |
		     value_commalist:s1 COMMA value:s2
                     {: value_list.addElement(new String(s2.str_val)); 
		        RESULT.str_val = s1.str_val;
	             :}
		     ;

column_commalist ::= column:s1
                     {: foo.removeAllElements();
		        foo.addElement(new String(s1.str_val)); 
		        RESULT.str_val = s1.str_val;
		     :}
		     |
		     column_commalist:s1 COMMA column:s2
                     {: foo.addElement(new String(s2.str_val)); 
		        RESULT.str_val = s1.str_val;
	             :}
		     ;

table_commalist  ::= table:s1
                     {: foo.removeAllElements();
		        foo.addElement(new String(s1.str_val)); 
		        RESULT.str_val = s1.str_val;
		     :}
		     |
		     table_commalist:s1 COMMA table:s2
                     {: foo.addElement(new String(s2.str_val)); 
		        RESULT.str_val = s1.str_val;
	             :}
		     ;
                  
column           ::= ASTERISK
                     {: RESULT.str_val = "*"; :}
                     |
		     NAME:s1
                     {: RESULT.str_val = s1.str_val; :}
		     |
		     table:s1 PERIOD column:s2
                     {: RESULT.str_val = s1.str_val + "." + s2.str_val; :}
	             ;


table            ::= NAME:s1
                     {: RESULT.str_val = s1.str_val; :}
	             ;

column_def_commalist 
                 ::= column_def 
                     |
		     column_def_commalist COMMA column_def
		     ;

column_def       ::= column:s1 CHARACTER LPAREN INT_NUM:s2 RPAREN
                     {: 
		       String column_def[] = new String[3];
		       column_def[0] = "CHAR";
		       column_def[1] = s1.str_val;
		       column_def[2] = s2.str_val;
		       column_list.addElement( column_def );
		     :}
		     |
                     column:s1 NUMERIC LPAREN INT_NUM:s2 RPAREN
                     {: 
		       String column_def[] = new String[3];
		       column_def[0] = "NUMERIC";
		       column_def[1] = s1.str_val;
		       column_def[2] = s2.str_val;
		       column_list.addElement( column_def );
		     :}
		     |
                     column:s1 INTEGER 
                     {: 
		       String column_def[] = new String[3];
		       column_def[0] = "NUMERIC";
		       column_def[1] = s1.str_val;
		       column_def[2] = "3";
		       column_list.addElement( column_def );
		     :}
		     ;

where_clause     ::= 
                     /* EMPTY */
                     |
		     WHERE search_condition
		     ;

search_condition ::= search_expr
                     |
		     search_condition AND search_expr
		     ;

search_expr      ::= column:s1 COMPARISON:s2 column:s3
                     {:
		       String search_expr_def[] = new String[4];
		       search_expr_def[0] = "JOIN";
		       search_expr_def[1] = s1.str_val;
		       search_expr_def[2] = s2.str_val;
		       search_expr_def[3] = s3.str_val;
		       search_list.addElement( search_expr_def );
		     :}
                     |
		     column:s1 COMPARISON:s2 STRING:s3
		     {:
		       String search_expr_def[] = new String[4];
		       search_expr_def[0] = "STRING_COMPARE";
		       search_expr_def[1] = s1.str_val;
		       search_expr_def[2] = s2.str_val;
		       search_expr_def[3] = s3.str_val;
		       search_list.addElement( search_expr_def );
		     :}
		     |
		     column:s1 COMPARISON:s2 INT_NUM:s3
		     {:
		       String search_expr_def[] = new String[4];
		       search_expr_def[0] = "INT_COMPARE";
		       search_expr_def[1] = s1.str_val;
		       search_expr_def[2] = s2.str_val;
		       search_expr_def[3] = s3.str_val;
		       search_list.addElement( search_expr_def );
		     :}
		     ;

set_clause       ::= SET set_expr
                     |
		     set_clause COMMA set_expr
		     ;

set_expr         ::= column:s1 COMPARISON value:s2
                     {:
		       foo.addElement(new String(s1.str_val)); 
		       value_list.addElement(new String(s2.str_val)); 
		     :}
		     ;



⌨️ 快捷键说明

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