-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathCreateSqlParser.java
More file actions
114 lines (99 loc) · 3.01 KB
/
Copy pathCreateSqlParser.java
File metadata and controls
114 lines (99 loc) · 3.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package com.sitinspring.common.sqlparser.single;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.*;
import javax.swing.plaf.basic.BasicSplitPaneUI.KeyboardDownRightHandler;
public class CreateSqlParser {
public static ArrayList<String> CreateAnalyze(String[][] token){
ArrayList<String> grammerList = null;
grammerList = new ArrayList<>();//create列表规则,“5(create);(表名);(属性名)”
// System.out.println("开始检测create相关语法");
int tokenLength = 0;
for(int i = 0; i < token.length; i++) {
if(token[i][0] == null) {
tokenLength = i+1;
break;
}
}
ArrayList<String> rationality_name = null;//属性名
rationality_name = new ArrayList<>();
ArrayList<String> data_type = null;//数据类型
data_type = new ArrayList<>();
ArrayList<String> data_size = null;//数据类型大小
data_size = new ArrayList<>();
boolean right = false;//判断句子语法是否正确
if(token[0][1].equals("create")&&token[1][1].equals("table")&&token[2][0].equals("2")&&token[3][1].equals("(")&&token[4][0].equals("2")) {
grammerList.add("5");
grammerList.add(";");
grammerList.add(token[2][1]);
grammerList.add(";");
for(int i = 4; i < tokenLength-1; i++) {
if(token[i][0].equals("2")) {
rationality_name.add(token[i][1]);
if((token[i-1][1].equals("(")||token[i-1][1].equals(","))&&token[i+1][0].equals("1")) {
data_type.add(token[i+1][1]);
if(token[i+2][1].equals(",")) {
data_size.add("null");
continue;
}
else if(token[i+2][1].equals(")")) {
if(token[i+3][1].equals(";")) {
data_size.add("null");
right = true;
break;
}
else {
right = false;
break;
}
}
else if (token[i+2][1].equals("(")) {
if(token[i+3][0].equals("3")&&token[i+4][1].equals(")")) {
data_size.add(token[i+3][1]);
if(token[i+5][1].equals(")")&&token[i+6][1].equals(";")) {
right = true;
break;
}
else if (token[i+5][1].equals(",")) {
continue;
}
else {
right = false;
break;
}
}
else {
right = false;
break;
}
}
else {
right = false;
break;
}
}
else {
right = false;
break;
}
}
if(token[i][1].equals(";")) {
right = true;
break;
}
}
}
else {
right = false;
}
grammerList.addAll(rationality_name);
if(right) {
System.out.println("语法正确");
}
else {
grammerList.clear();
System.out.println("语法错误");
}
return grammerList;
}
}