📄 interpreter.java
字号:
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 + -