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

📄 interpreter.java

📁 用JAVA实现的miniSQL
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
public class Interpreter {
    int mean; //类型,1代表创建表,2为删除表,3为创建索引,4为删除索引,5为选择语句,6为插入语句,7为删除语句,8为退出语句,9为执行脚本语句
    int attnumber;//创建表时属性的个数,或者是select操作的结果要求属性个数,当=0时代表select选择所有的属性。
    String table;//创建或删除表时的表名,或者做select操作时的表名,或者是创建索引时的表名,或者是插入删除记录时的表名,或者是执行exefile时的文件名
    String[] attribute;//创建表时用的属性列,或者是select操作时映射的属性列
    int[] atttype;//创建表时的各属性类型,1代表整型,2代表浮点型,3代表字符串型
    int[] attlength;//创建表时的各属性长度,整型有4个字节,浮点型也是4个字节,字符串有2n个字节
    String[] attindex;//此属性上是否有索引,没有为null,有就是此字符串的名为索引名
    boolean[] unique;//创建表时表示各属性是否为unique类型
    String primarykey;//创建表时主键的属性名称,
    String uniqueatt;//或者是创建索引时的unique属性名
    String indexname;//创建索引时的索引名,或者是删除索引时的索引名
    int opnumber;//select或delete操作中,要求条件比较的个数,或者是插入记录时一共插入的属性值个数
    String[] opatt;//select或delete操作中,要求条件比较的各条件属性名
    int[] opcode;//select或delete操作中,1表示=,2表示<>,3表示<,4表示>,5表示<=,6表示>=
    String[] op2;//select或delete操作中,各条件要比较的对像,或者是插入记录时对各属性插入的值
    boolean[] ischar;//select或者insert或delete时各属性值是否为字符型
    public Interpreter(String s){
    	    this.init(s);
    }
    public int init(String s) {
    	try{
    	int endIndex = 0;
    	while(endIndex+1<s.length()){
                    if((s.charAt(endIndex)==' '||s.charAt(endIndex)=='\n'))
                	endIndex++;
                	else
                		break;
                }
    		
        int firstIndex = endIndex;
        int tempIndex = 0;
        endIndex = s.indexOf(' ',firstIndex);
    	if(endIndex==-1) endIndex = s.indexOf('\n',firstIndex);
    	if(endIndex==-1) endIndex = s.indexOf(';',firstIndex);
    	if(endIndex==-1){
    		System.out.println("Interpreter 1"); 
    		mean=0;
    		return 0;
    	}
        
    	String operate = s.substring(firstIndex, endIndex);
    	if(operate.equalsIgnoreCase("create")){             
    		while(endIndex+1<s.length()){
                    if((s.charAt(endIndex+1)==' '||s.charAt(endIndex+1)=='\n'))
                	    endIndex++;
                	else
                		break;
                }
                if(endIndex+1==s.length()){
    		        System.out.println("Interpreter 2"); 
    		        mean=0;
    		        return 0;
    	        }	
            firstIndex=endIndex+1;
    		tempIndex = endIndex;
    		endIndex = s.indexOf(' ', tempIndex+1);
    		if(endIndex==-1) 
    		    {
    		    	endIndex = s.indexOf('\n',tempIndex+1);
    	            if(endIndex==-1){
    		              System.out.println("Interpreter 3"); 
    		              mean=0;
    		              return 0;
    	            }
    		    }
    		else if(s.substring(firstIndex,endIndex).indexOf('\n')>=0)
    		    	endIndex = s.substring(firstIndex,endIndex).indexOf('\n')+firstIndex;
    		operate = s.substring(firstIndex, endIndex);
    		if(operate.equalsIgnoreCase("table")){          //创建表  1
    			mean = 1;
                firstIndex = endIndex;
                while(endIndex+1<s.length()){
                    if((s.charAt(endIndex+1)==' '||s.charAt(endIndex+1)=='\n'))
                	    endIndex++;
                	else
                		break;
                }
                if(endIndex+1==s.length()){
    		        System.out.println("Interpreter 4"); 
    		        mean=0;
    		        return 0;
    	        }	
                firstIndex=endIndex+1;
                endIndex = s.indexOf(' ', firstIndex);
    		    if(endIndex==-1) 
    		    {
    		        endIndex = s.indexOf('\n',firstIndex);
    	            if(endIndex==-1){
    		             System.out.println("Interpreter 5"); 
    		             mean=0;
    		             return 0;
    	            }
    	     	}
    		    else if(s.substring(firstIndex,endIndex).indexOf('\n')>=0)
    		        endIndex = s.substring(firstIndex,endIndex).indexOf('\n')+firstIndex;
                table = s.substring(firstIndex, endIndex);
                firstIndex = endIndex;
                endIndex = s.indexOf('(', endIndex);
                if(endIndex==-1){
    		        System.out.println("Interpreter 6"); 
    		        mean=0;
    		        return 0;
    	        }
                int temp;
                attnumber=0;
                temp = s.indexOf(',', endIndex);
                while(temp!=-1){
                	attnumber++;
                	temp = s.indexOf(',', temp+1);
                }
                attribute = new String[attnumber];
                atttype = new int[attnumber];
                attlength = new int[attnumber];
                unique = new boolean[attnumber];
                for(int i=0;i<attnumber;i++){
                	while(endIndex+1<s.length()){
                    if((s.charAt(endIndex+1)==' '||s.charAt(endIndex+1)=='\n'))
                	endIndex++;
                	else
                		break;
                    }
                    if(endIndex+1==s.length()){
    		            System.out.println("Interpreter 7"); 
    		            mean=0;
    		            return 0;
    	            }	
                    firstIndex=endIndex+1;
                    endIndex = s.indexOf(' ',firstIndex);
                    if(endIndex==-1) 
    		        {
    		            endIndex = s.indexOf('\n',firstIndex);
    	                if(endIndex==-1){
    		                 System.out.println("Interpreter 8"); 
    		                 mean=0;
    		                 return 0;
    	                }
    	     	    }
    		        else if(s.substring(firstIndex,endIndex).indexOf('\n')>=0)
    		            endIndex = s.substring(firstIndex,endIndex).indexOf('\n')+firstIndex;
                    attribute[i]=s.substring(firstIndex,endIndex);
                   
                    while(endIndex+1<s.length()){
                        if((s.charAt(endIndex+1)==' '||s.charAt(endIndex+1)=='\n'))
                	        endIndex++;
                	    else
                		    break;
                    }
                    if(endIndex+1==s.length()){
    		            System.out.println("Interpreter 9"); 
    		            mean=0;
    		            return 0;
    	            }
    	            firstIndex = endIndex+1;
    	            if(s.charAt(firstIndex)=='c')
    	                 endIndex = endIndex+5;
    	            else if(s.charAt(firstIndex)=='i')
    	            	endIndex = endIndex+4;
    	            else if(s.charAt(firstIndex)=='f')
    	            	endIndex = endIndex+6;
    	            else
    	            {
    	            	System.out.println("Interpreter 10"); 
    		            mean=0;
    		            return 0;
    	            }
    	            if(endIndex==-1){
    		            System.out.println("Interpreter 11"); 
    		            mean=0;
    		            return 0;
    	            }
    	            if(s.substring(firstIndex, endIndex).equalsIgnoreCase("int"))
    	            {
    	            	atttype[i]=1;
    	            	attlength[i]=4;
    	            	endIndex--;
    	            }
    	            else if(s.substring(firstIndex, endIndex).equalsIgnoreCase("float")){
    	            	atttype[i]=2;
    	            	attlength[i]=4;
    	            	endIndex--;
    	            }
    	            else if(s.substring(firstIndex, endIndex).equalsIgnoreCase("char")){
    	            	atttype[i]=3;
    	            	endIndex = s.indexOf('(',endIndex);
    	            	if(endIndex==-1){
    		                System.out.println("Interpreter 12"); 
    		                mean=0;
    		                return 0;
    	                }
    	            	tempIndex = endIndex;
    	                endIndex = s.indexOf(')',tempIndex);
    	                if(endIndex==-1){
    		                System.out.println("Interpreter 13"); 
    		                mean=0;
    		                return 0;
    	                }
    	                try{
    	            	attlength[i]=2*Integer.parseInt(s.substring(tempIndex+1,endIndex));
    	                }
    	                catch(NumberFormatException e)
    	                {
    	                	System.out.println("Interpreter 14"); 
    		                mean=0;
    		                return 0;
    	                }
    	            }
    	            else {
    	            	System.out.println("Interpreter 15"); 
    		            mean=0;
    		            return 0;
    	            }
    	            while(endIndex+1<s.length()){
                        if((s.charAt(endIndex+1)==' '||s.charAt(endIndex+1)=='\n'))
                	        endIndex++;
                	    else
                		    break;
                    }
                    if(endIndex+1==s.length()){
    		            System.out.println("Interpreter 16"); 
    		            mean=0;
    		            return 0;
    	            }	
                    firstIndex=endIndex+1;
                    if(s.charAt(firstIndex)==','){
                    	endIndex = firstIndex+1;
                    	unique[i]=false;
                        firstIndex = endIndex;
                    }
                    else
                    {
                    	if(s.substring(firstIndex,firstIndex+6).equalsIgnoreCase("unique")){
                    		unique[i]=true;
                    		endIndex = s.indexOf(',',firstIndex);
                    		firstIndex = endIndex+1;
                    	    endIndex = firstIndex;
                    	}
                    	else
                    	{
                    		System.out.println("Interpreter 17"); 
    		                mean=0;
    		                return 0;
                    	}
                    }
                }
                endIndex = s.indexOf('(',firstIndex);
                if(endIndex==-1){
    		        System.out.println("Interpreter 18"); 
    		        mean=0;
    		        return 0;
                }
                while(endIndex+1<s.length()){
                    if((s.charAt(endIndex+1)==' '||s.charAt(endIndex+1)=='\n'))
                	    endIndex++;
                	else
                		break;
                }
                if(endIndex+1==s.length()){
    		        System.out.println("Interpreter 19"); 
    		        mean=0;
    		        return 0;
    	        }	
                firstIndex=endIndex+1;
                endIndex = s.indexOf(')',firstIndex);
                tempIndex=endIndex;
                if(endIndex==-1){
    		        System.out.println("Interpreter 20"); 
    		        mean=0;
    		        return 0;
                }
                while(endIndex-1>firstIndex){
                    if(s.charAt(endIndex-1)==' ')
                	    endIndex--;
                	else
                		break;
                }
                if(endIndex-1==firstIndex){
    		        System.out.println("Interpreter 21"); 
    		        mean=0;
    		        return 0;
    	        }
    	        primarykey = s.substring(firstIndex,endIndex);
    	        endIndex = s.indexOf(')',tempIndex+1);
                if(endIndex==-1){
    		        System.out.println("Interpreter 22"); 
    		        mean=0;
    		        return 0;
                }
                
                while(endIndex+1<s.length()){
                    if((s.charAt(endIndex+1)==' '||s.charAt(endIndex+1)=='\n'))
                	    endIndex++;
                	else
                		break;
                }
                if(endIndex+1==s.length()){
    		        System.out.println("Interpreter 23"); 
    		        mean=0;
    		        return 0;
    	        }	
                firstIndex=endIndex+1;
                if(s.charAt(firstIndex)!=';')
                {
                	System.out.println("Interpreter 24"); 
    		        mean=0;
    		        return 0;
                }
    		}
    		else if (operate.equalsIgnoreCase("index")){                 //创建索引 3
    			mean = 3;
                firstIndex = endIndex;
                while(endIndex+1<s.length()){
                    if((s.charAt(endIndex+1)==' '||s.charAt(endIndex+1)=='\n'))
                	    endIndex++;
                	else
                		break;
                }
                if(endIndex+1==s.length()){
    		        System.out.println("Interpreter 25"); 
    		        mean=0;
    		        return 0;
    	        }	
                firstIndex=endIndex+1;
                endIndex = s.indexOf(' ', firstIndex);
    		    if(endIndex==-1) 
    		    {
    		        endIndex = s.indexOf('\n',firstIndex);
    	            if(endIndex==-1){
    		             System.out.println("Interpreter 26"); 
    		             mean=0;
    		             return 0;
    	            }
    	     	}
    		    else if(s.substring(firstIndex,endIndex).indexOf('\n')>=0)
    		        endIndex = s.substring(firstIndex,endIndex).indexOf('\n')+firstIndex;
                indexname = s.substring(firstIndex, endIndex);
                while(endIndex+1<s.length()){
                    if((s.charAt(endIndex+1)==' '||s.charAt(endIndex+1)=='\n'))
                	    endIndex++;
                	else
                		break;
                }
                if(endIndex+1==s.length()){
    		        System.out.println("Interpreter 27"); 
    		        mean=0;
    		        return 0;
    	        }	
                firstIndex=endIndex+1;
                if(!s.substring(firstIndex,firstIndex+2).equalsIgnoreCase("on"))
                {
                   	System.out.println("Interpreter 28"); 
    		        mean=0;
    		        return 0;
    		    }
    		    firstIndex = firstIndex+2;
    		    endIndex = firstIndex;
    		    while(endIndex+1<s.length()){
                    if((s.charAt(endIndex+1)==' '||s.charAt(endIndex+1)=='\n'))
                	    endIndex++;
                	else
                		break;
                }
                if(endIndex+1==s.length()){
    		        System.out.println("Interpreter 29"); 
    		        mean=0;
    		        return 0;
    	        }	
                firstIndex=endIndex+1;
    		    endIndex = s.indexOf(' ',firstIndex);
    		    if(endIndex==-1) 
    		    {
    		    	endIndex = s.indexOf('\n',tempIndex+1);
    	            if(endIndex==-1){
    		              System.out.println("Interpreter 30"); 
    		              mean=0;
    		              return 0;
    	            }
    		    }
    		    else if(s.substring(firstIndex,endIndex).indexOf('\n')>=0)
    		    	endIndex = s.substring(firstIndex,endIndex).indexOf('\n')+firstIndex;
    		    table = s.substring(firstIndex,endIndex);
    		    endIndex = s.indexOf('(',endIndex);
                if(endIndex==-1){
    		        System.out.println("Interpreter 31"); 
    		        mean=0;
    		        return 0;
                }
                while(endIndex+1<s.length()){
                    if((s.charAt(endIndex+1)==' '||s.charAt(endIndex+1)=='\n'))
                	    endIndex++;
                	else

⌨️ 快捷键说明

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