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 + -
显示快捷键?