interpreter.java

来自「用JAVA实现的miniSQL」· Java 代码 · 共 1,173 行 · 第 1/3 页

JAVA
1,173
字号
    	        if(s.charAt(firstIndex)=='\''){
    	        	firstIndex++;
    	        	endIndex=s.indexOf('\'',firstIndex);
    	        	if(endIndex==-1){
    	        		System.out.println("Interprete 60"); 
    		            mean=0;
    		            return 0;
    	        	}
    	        	op2[i] = s.substring(firstIndex,endIndex);
    	        	ischar[i] = true;
    	        }
    	        else{
    	        	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("Interprete 61"); 
    		                    mean=0;
    		                    return 0;
    	                    }
    	                }
    	     	    }
    		        else if(s.substring(firstIndex,endIndex).indexOf('\n')>=0)
    		            endIndex = s.substring(firstIndex,endIndex).indexOf('\n')+firstIndex;
                    op2[i] = s.substring(firstIndex, endIndex);
                    ischar[i] = false;
    	        }
    	        endIndex = s.indexOf("and", endIndex);
    	        if(endIndex == -1 ){
                    endIndex = s.indexOf(';', firstIndex);
                    if(endIndex==-1){
                    	System.out.println("Interprete 62"); 
    		            mean=0;
    		            return 0;
                    }
    	        	break;
    	        }
    	        firstIndex = endIndex = endIndex+3;
    	        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("Interprete 63"); 
    		        mean=0;
    		        return 0;
    	        }
    	        firstIndex=endIndex+1;
    		}
    	}
    	else if(operate.equalsIgnoreCase("insert")){                            //插入记录    6
    		mean = 6;
    		endIndex = s.indexOf("into", endIndex);
    		firstIndex = endIndex = endIndex+4;
    		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("Interprete 64"); 
    		    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("Interprete 65"); 
    		        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("values", endIndex);
            if(endIndex==-1){
    		    System.out.println("Interprete 66"); 
    		    mean=0;
    		    return 0;
    	    }
    	    firstIndex = endIndex = endIndex+6;
    	    endIndex = s.indexOf('(', endIndex);
    	    tempIndex = firstIndex = endIndex;
    	    opnumber = 1;
    	    while(true){
    	    	tempIndex = s.indexOf(',',tempIndex+1);
    	    	if(tempIndex==-1)
    	    		break;
    	    	opnumber++;
    	    }
    	    op2 = new String[opnumber];
    	    ischar = new boolean[opnumber];
    	    for(int i=0;i<opnumber;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("Interprete 67"); 
    		        mean=0;
    		        return 0;
    	        }
    	        firstIndex=endIndex+1;
    	        if(s.charAt(firstIndex)=='\''){
    	        	firstIndex++;
    	        	endIndex=s.indexOf('\'',firstIndex);
    	        	if(endIndex==-1){
    	        		System.out.println("Interprete 68"); 
    		            mean=0;
    		            return 0;
    	        	}
    	        	op2[i] = s.substring(firstIndex,endIndex);
    	        	ischar[i] = true;
    	        }
    	        else{
    	        	endIndex = s.indexOf(',', firstIndex);
    		        if(endIndex==-1) 
    		        {
    		            endIndex = s.indexOf(')',firstIndex);
    	                if(endIndex==-1){
    		                System.out.println("Interprete 69"); 
    		                mean=0;
    		                return 0;
    	                }
    	     	    }
    		        else if(s.substring(firstIndex,endIndex).indexOf(' ')>=0)
    		            endIndex = s.substring(firstIndex,endIndex).indexOf(' ')+firstIndex;
                    op2[i] = s.substring(firstIndex, endIndex);
                    ischar[i] = false;
    	        }
    	        endIndex = s.indexOf(',', endIndex);
    	        if(endIndex == -1 ){
                    endIndex = s.indexOf(')', firstIndex);
                    if(endIndex==-1){
                    	System.out.println("Interprete 70"); 
    		            mean=0;
    		            return 0;
                    }
    	        	break;
    	        }
    	        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("Interprete 71"); 
    		        mean=0;
    		        return 0;
    	        }
    	        firstIndex=endIndex+1;
    	    }
    	    endIndex=s.indexOf(';', endIndex);
    	}
    	else if(operate.equalsIgnoreCase("delete")){     //delete记录   7
    		mean = 7;
    		endIndex = s.indexOf("from", endIndex);
    		if(endIndex == -1){
    			System.out.println("Interprete 71next");
    			mean = 0;
    			return 0;
    		}
    		endIndex=endIndex+4;
    		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("Interprete 72"); 
    		    mean=0;
    		    return 0;
    	    }
    	    firstIndex=endIndex+1;
    	    endIndex = s.indexOf(' ', firstIndex);
    		if(endIndex==-1) 
    		{
    		    endIndex = s.indexOf('\n',firstIndex);
    	        if(endIndex==-1){
    	        	 if(s.indexOf("where",firstIndex)<0)
    	        	 	 endIndex = s.indexOf(';',firstIndex);
    	        	 if(endIndex == -1){
    		             System.out.println("Interprete 73"); 
    		             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);
    		opnumber=1;
    		endIndex = s.indexOf("where", endIndex);
    		if(endIndex==-1)
    		{
    			opnumber=0;
    			return 1;
    		}
    		tempIndex=endIndex;
    		while(true){
    			tempIndex=s.indexOf("and", tempIndex+1);
    			if(tempIndex==-1)
    				break;
    			opnumber++;
    		}
    		endIndex=endIndex+5;
    		opatt = new String[opnumber];
    		opcode = new int[opnumber];
    		op2 = new String[opnumber];
    		ischar = new boolean[opnumber];
    		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("Interprete 74"); 
    		    mean=0;
    		    return 0;
    	    }
    	    firstIndex=endIndex+1;
    		for(int i=0;i<opnumber;i++){
    			endIndex = s.indexOf(' ',firstIndex);
    			opatt[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("Interprete 75"); 
    		        mean=0;
    		        return 0;
    	        }
    	        firstIndex=endIndex+1;
    	        if(s.substring(firstIndex,firstIndex+2).equalsIgnoreCase("= ")){
    	            opcode[i] = 1;
    	        }
    	        else if(s.substring(firstIndex,firstIndex+2).equalsIgnoreCase("<>")){
    	        	opcode[i] = 2;
    	        }
    	        else if(s.substring(firstIndex,firstIndex+2).equalsIgnoreCase("< ")){
    	        	opcode[i] = 3;
    	        }
    	        else if(s.substring(firstIndex,firstIndex+2).equalsIgnoreCase("> ")){
    	        	opcode[i] = 4;
    	        }
    	        else if(s.substring(firstIndex,firstIndex+2).equalsIgnoreCase("<=")){
    	        	opcode[i] = 5;
    	        }
    	        else if(s.substring(firstIndex,firstIndex+2).equalsIgnoreCase(">=")){
    	        	opcode[i] = 6;
    	        }
    	        else{
    	        	System.out.println("Interprete 76"); 
    		        mean=0;
    		        return 0;
    	        }
    	        endIndex=firstIndex=firstIndex+1;
    	        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("Interprete 77"); 
    		        mean=0;
    		        return 0;
    	        }
    	        firstIndex=endIndex+1;
    	        if(s.charAt(firstIndex)=='\''){
    	        	firstIndex++;
    	        	endIndex=s.indexOf('\'',firstIndex);
    	        	if(endIndex==-1){
    	        		System.out.println("Interprete 78"); 
    		            mean=0;
    		            return 0;
    	        	}
    	        	op2[i] = s.substring(firstIndex,endIndex);
    	        	ischar[i] = true;
    	        }
    	        else{
    	        	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("Interprete 79"); 
    		                    mean=0;
    		                    return 0;
    	                    }
    	                }
    	     	    }
    		        else if(s.substring(firstIndex,endIndex).indexOf('\n')>=0)
    		            endIndex = s.substring(firstIndex,endIndex).indexOf('\n')+firstIndex;
                    op2[i] = s.substring(firstIndex, endIndex);
                    ischar[i] = false;
    	        }
    	        endIndex = s.indexOf("and", endIndex);
    	        if(endIndex == -1 ){
                    endIndex = s.indexOf(';', firstIndex);
                    if(endIndex==-1){
                    	System.out.println("Interprete 80"); 
    		            mean=0;
    		            return 0;
                    }
    	        	break;
    	        }
    	        firstIndex = endIndex = endIndex+3;
    	        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("Interprete 81"); 
    		        mean=0;
    		        return 0;
    	        }
    	        firstIndex=endIndex+1;
    		}
    	}
    	else if(operate.equalsIgnoreCase("quit")){
    		mean = 8;
    	}
    	else if(operate.equalsIgnoreCase("exefile")){
    		mean = 9;
    		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("Interprete 82"); 
    		        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){
    		    	    endIndex = s.indexOf(';',tempIndex+1);
    	                if(endIndex==-1){
    		                System.out.println("Interprete 83"); 
    		                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);
    	}
    	else{
    		System.out.println("Interprete 84");
    		mean = 0;
    		return 0;
    	}
        return 1;
    	}catch(Exception e){
    		mean = 0;
    		System.out.println("语法严重不合规责,请重输");
    		return 0;
    	}
    }
}

⌨️ 快捷键说明

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