|
@@ -1,5 +1,9 @@
|
|
package com.example.xiaoshiweixinback.business.utils.parseQueryToTree;
|
|
package com.example.xiaoshiweixinback.business.utils.parseQueryToTree;
|
|
|
|
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+import com.example.xiaoshiweixinback.business.utils.StringUtils;
|
|
|
|
+
|
|
import java.util.ArrayList;
|
|
import java.util.ArrayList;
|
|
import java.util.HashMap;
|
|
import java.util.HashMap;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
@@ -32,8 +36,8 @@ public class expressManager {
|
|
oOR.Code = "NOT";
|
|
oOR.Code = "NOT";
|
|
oOR.ShowName = "NOT";
|
|
oOR.ShowName = "NOT";
|
|
oOR.type = enuType.Logic;
|
|
oOR.type = enuType.Logic;
|
|
- oOR.priorityVale = 11;
|
|
|
|
- oOR.operateValue = 2;
|
|
|
|
|
|
+ oOR.priorityVale = 12;
|
|
|
|
+ oOR.operateValue = 1;
|
|
hSymbols.put(oOR.Code, oOR);
|
|
hSymbols.put(oOR.Code, oOR);
|
|
|
|
|
|
oOR = new operate();
|
|
oOR = new operate();
|
|
@@ -44,13 +48,6 @@ public class expressManager {
|
|
oOR.operateValue = 2;
|
|
oOR.operateValue = 2;
|
|
hSymbols.put(oOR.Code, oOR);
|
|
hSymbols.put(oOR.Code, oOR);
|
|
|
|
|
|
- oOR = new operate();
|
|
|
|
- oOR.Code = "~";
|
|
|
|
- oOR.ShowName = "TO";
|
|
|
|
- oOR.type = enuType.Logic;
|
|
|
|
- oOR.priorityVale = 21;
|
|
|
|
- oOR.operateValue = 2;
|
|
|
|
- hSymbols.put(oOR.Code, oOR);
|
|
|
|
|
|
|
|
oOR = new operate();
|
|
oOR = new operate();
|
|
oOR.Code = "=";
|
|
oOR.Code = "=";
|
|
@@ -148,21 +145,8 @@ public class expressManager {
|
|
|
|
|
|
public Symbol getSymbol(String strSymbol) {
|
|
public Symbol getSymbol(String strSymbol) {
|
|
String strKey = strSymbol.trim().toUpperCase();
|
|
String strKey = strSymbol.trim().toUpperCase();
|
|
- if ((strKey != null && !strKey.trim().equals(""))) {
|
|
|
|
- if (hSymbols.containsKey(strKey)) {
|
|
|
|
- return hSymbols.get(strKey);
|
|
|
|
- } else if (strKey.matches("\\$W[0-9]+")) {
|
|
|
|
- operate tem = new operate();
|
|
|
|
- tem = new operate();
|
|
|
|
- tem.Code = strKey;
|
|
|
|
- tem.ShowName = strKey;
|
|
|
|
- tem.type = enuType.Assignment;
|
|
|
|
- tem.priorityVale = 24;
|
|
|
|
- tem.operateValue = 2;
|
|
|
|
- return tem;
|
|
|
|
- } else {
|
|
|
|
- return null;
|
|
|
|
- }
|
|
|
|
|
|
+ if ((strKey != null && !strKey.trim().equals("")) && hSymbols.containsKey(strKey)) {
|
|
|
|
+ return hSymbols.get(strKey);
|
|
} else {
|
|
} else {
|
|
return null;
|
|
return null;
|
|
}
|
|
}
|
|
@@ -178,147 +162,167 @@ public class expressManager {
|
|
ArrayList<String> Tokens = GetTokens(strExpress);
|
|
ArrayList<String> Tokens = GetTokens(strExpress);
|
|
Stack<Symbol> symbolStack = new Stack<Symbol>();
|
|
Stack<Symbol> symbolStack = new Stack<Symbol>();
|
|
Stack<treeNode> valueStack = new Stack<treeNode>();
|
|
Stack<treeNode> valueStack = new Stack<treeNode>();
|
|
- for (String strTem : Tokens) {
|
|
|
|
- Symbol temSymbol = expressManager.getInstance().getSymbol(strTem);
|
|
|
|
- if (temSymbol != null) {
|
|
|
|
- if (temSymbol instanceof operate) {
|
|
|
|
- //#region 如果是操作符,从操作符堆栈中取出优先级大于等于该操作符的结合值堆栈生成节点后压入值堆栈,然后将该操作符压入堆栈
|
|
|
|
- operate temOperate = (operate) temSymbol;
|
|
|
|
- if (symbolStack.size() > 0) {
|
|
|
|
- Symbol lastSymbol = symbolStack.peek();
|
|
|
|
-
|
|
|
|
- while (lastSymbol instanceof operate && ((operate) lastSymbol).priorityVale >= temOperate.priorityVale) {
|
|
|
|
- operateNode temSymbolNode = new operateNode();
|
|
|
|
- temSymbolNode.operate = (operate) lastSymbol;
|
|
|
|
- if (((operate) lastSymbol).operateValue == 1) {
|
|
|
|
- temSymbolNode.Right = valueStack.pop();
|
|
|
|
- } else {
|
|
|
|
- temSymbolNode.Right = valueStack.pop();
|
|
|
|
- temSymbolNode.Left = valueStack.pop();
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- valueStack.push(temSymbolNode);
|
|
|
|
-
|
|
|
|
- symbolStack.pop();
|
|
|
|
-
|
|
|
|
- if (symbolStack.size() > 0) {
|
|
|
|
- lastSymbol = symbolStack.peek();
|
|
|
|
- } else {
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- symbolStack.push(temSymbol);
|
|
|
|
- //#endregion
|
|
|
|
- } else {
|
|
|
|
- //#region 括号处理
|
|
|
|
- if (temSymbol instanceof pairSymbol && ((pairSymbol) temSymbol).isEndSymbol) {
|
|
|
|
- Symbol lastSymbol = symbolStack.peek();
|
|
|
|
-
|
|
|
|
- if (lastSymbol == null) {
|
|
|
|
- throw new Exception("无效的括号!");
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- while (lastSymbol instanceof operate ||
|
|
|
|
- (lastSymbol instanceof pairSymbol && ((pairSymbol) lastSymbol).Code != ((pairSymbol) temSymbol).previewSymbol.Code)) {
|
|
|
|
- operateNode temSymbolNode = new operateNode();
|
|
|
|
- temSymbolNode.operate = (operate) lastSymbol;
|
|
|
|
-
|
|
|
|
- if (((operate) lastSymbol).operateValue == 1) {
|
|
|
|
- temSymbolNode.Right = valueStack.pop();
|
|
|
|
- } else {
|
|
|
|
- temSymbolNode.Right = valueStack.pop();
|
|
|
|
- temSymbolNode.Left = valueStack.pop();
|
|
|
|
- }
|
|
|
|
- valueStack.push(temSymbolNode);
|
|
|
|
-
|
|
|
|
- symbolStack.pop();
|
|
|
|
- lastSymbol = symbolStack.peek();
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if ((lastSymbol instanceof pairSymbol && ((pairSymbol) temSymbol).previewSymbol.Code == ((pairSymbol) lastSymbol).Code)) {
|
|
|
|
- symbolStack.pop();
|
|
|
|
- } else {
|
|
|
|
- throw new Exception("无效的括号");
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- } else {
|
|
|
|
- symbolStack.push(temSymbol);
|
|
|
|
- }
|
|
|
|
- //#endregion
|
|
|
|
- }
|
|
|
|
- } else {
|
|
|
|
- valueNode temNode = new valueNode();
|
|
|
|
- temNode.value = strTem;
|
|
|
|
-
|
|
|
|
- valueStack.push(temNode);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- while (symbolStack.size() > 0) {
|
|
|
|
- Symbol temSymbol = symbolStack.pop();
|
|
|
|
-
|
|
|
|
- if (temSymbol instanceof operate) {
|
|
|
|
- operateNode temNode = new operateNode();
|
|
|
|
- temNode.operate = (operate) temSymbol;
|
|
|
|
-
|
|
|
|
- if (((operate) temSymbol).operateValue == 1) {
|
|
|
|
- temNode.Right = valueStack.pop();
|
|
|
|
- } else {
|
|
|
|
- temNode.Right = valueStack.pop();
|
|
|
|
- temNode.Left = valueStack.pop();
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- valueStack.push(temNode);
|
|
|
|
-
|
|
|
|
- } else {
|
|
|
|
- throw new Exception("无效的括号!");
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if (valueStack.size() == 1) {
|
|
|
|
- return valueStack.pop();
|
|
|
|
- } else {
|
|
|
|
-
|
|
|
|
- if (valueStack.size() > 1) {
|
|
|
|
- List<treeNode> lstValues = new ArrayList<treeNode>();
|
|
|
|
-
|
|
|
|
- while (valueStack.size() > 0) {
|
|
|
|
- treeNode temNode = valueStack.pop();
|
|
|
|
-
|
|
|
|
- if (temNode instanceof valueNode) {
|
|
|
|
- lstValues.add(temNode);
|
|
|
|
- } else {
|
|
|
|
- throw new Exception("无效的检索式!");
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- treeNode retNode = null;
|
|
|
|
-
|
|
|
|
- for (treeNode temNode : lstValues) {
|
|
|
|
- if (retNode == null) {
|
|
|
|
- retNode = temNode;
|
|
|
|
- } else {
|
|
|
|
- operateNode sNode = new operateNode();
|
|
|
|
-
|
|
|
|
- if (!isAnd) {
|
|
|
|
- sNode.operate = (operate) expressManager.getInstance().getSymbol("OR");
|
|
|
|
- } else {
|
|
|
|
- sNode.operate = (operate) expressManager.getInstance().getSymbol("AND");
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- sNode.Left = retNode;
|
|
|
|
- sNode.Right = temNode;
|
|
|
|
- retNode = sNode;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return retNode;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- throw new Exception("无效的检索式!");
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
|
|
+ List<String> middleKuoHaoStrs = new ArrayList<>();
|
|
|
|
+ return ExpressTreeNode.Tokens2Node(Tokens, isAnd);
|
|
|
|
+// Boolean ifFindEndingMiddleKuoHaoStrs = false;
|
|
|
|
+// for (String strTem : Tokens) {
|
|
|
|
+// Symbol temSymbol = expressManager.getInstance().getSymbol(strTem);
|
|
|
|
+// if (ifFindEndingMiddleKuoHaoStrs && (temSymbol == null || !(temSymbol instanceof pairSymbol && ((pairSymbol) temSymbol).Code.equals("]")))) {
|
|
|
|
+// middleKuoHaoStrs.add(strTem);
|
|
|
|
+// } else if (temSymbol != null) {
|
|
|
|
+// if (temSymbol instanceof operate) {
|
|
|
|
+// //#region 如果是操作符,从操作符堆栈中取出优先级大于等于该操作符的结合值堆栈生成节点后压入值堆栈,然后将该操作符压入堆栈
|
|
|
|
+// operate temOperate = (operate) temSymbol;
|
|
|
|
+// if (symbolStack.size() > 0) {
|
|
|
|
+// Symbol lastSymbol = symbolStack.peek();
|
|
|
|
+//
|
|
|
|
+// while (lastSymbol instanceof operate && ((operate) lastSymbol).priorityVale >= temOperate.priorityVale) {
|
|
|
|
+// operateNode temSymbolNode = new operateNode();
|
|
|
|
+// temSymbolNode.operate = (operate) lastSymbol;
|
|
|
|
+// if (((operate) lastSymbol).operateValue == 1) {
|
|
|
|
+// temSymbolNode.Right = valueStack.pop();
|
|
|
|
+// } else {
|
|
|
|
+// temSymbolNode.Right = valueStack.pop();
|
|
|
|
+// temSymbolNode.Left = valueStack.pop();
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// valueStack.push(temSymbolNode);
|
|
|
|
+//
|
|
|
|
+// symbolStack.pop();
|
|
|
|
+//
|
|
|
|
+// if (symbolStack.size() > 0) {
|
|
|
|
+// lastSymbol = symbolStack.peek();
|
|
|
|
+// } else {
|
|
|
|
+// break;
|
|
|
|
+// }
|
|
|
|
+// }
|
|
|
|
+// }
|
|
|
|
+// symbolStack.push(temSymbol);
|
|
|
|
+// //#endregion
|
|
|
|
+// } else {
|
|
|
|
+// if (temSymbol instanceof pairSymbol && ((pairSymbol) temSymbol).Code.equals("[")) {
|
|
|
|
+// ifFindEndingMiddleKuoHaoStrs = true;
|
|
|
|
+// } else if (temSymbol instanceof pairSymbol && ((pairSymbol) temSymbol).Code.equals("]")) {
|
|
|
|
+// ifFindEndingMiddleKuoHaoStrs = false;
|
|
|
|
+// String temp = StringUtils.join(middleKuoHaoStrs, ",");
|
|
|
|
+// valueNode temNode = new valueNode();
|
|
|
|
+// temNode.value = temp;
|
|
|
|
+// valueStack.push(temNode);
|
|
|
|
+// middleKuoHaoStrs = new ArrayList<>();
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// //#region 括号处理
|
|
|
|
+// else if (temSymbol instanceof pairSymbol && ((pairSymbol) temSymbol).isEndSymbol) {
|
|
|
|
+// Symbol lastSymbol = symbolStack.peek();
|
|
|
|
+//
|
|
|
|
+// if (lastSymbol == null) {
|
|
|
|
+// throw new Exception("无效的括号!");
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// while (lastSymbol instanceof operate ||
|
|
|
|
+// (lastSymbol instanceof pairSymbol && ((pairSymbol) lastSymbol).Code != ((pairSymbol) temSymbol).previewSymbol.Code)) {
|
|
|
|
+// operateNode temSymbolNode = new operateNode();
|
|
|
|
+// temSymbolNode.operate = (operate) lastSymbol;
|
|
|
|
+//
|
|
|
|
+// if (((operate) lastSymbol).operateValue == 1) {
|
|
|
|
+// temSymbolNode.Right = valueStack.pop();
|
|
|
|
+// } else {
|
|
|
|
+// temSymbolNode.Right = valueStack.pop();
|
|
|
|
+// temSymbolNode.Left = valueStack.pop();
|
|
|
|
+// }
|
|
|
|
+// valueStack.push(temSymbolNode);
|
|
|
|
+//
|
|
|
|
+// symbolStack.pop();
|
|
|
|
+// lastSymbol = symbolStack.peek();
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// if ((lastSymbol instanceof pairSymbol && ((pairSymbol) temSymbol).previewSymbol.Code == ((pairSymbol) lastSymbol).Code)) {
|
|
|
|
+// symbolStack.pop();
|
|
|
|
+// } else {
|
|
|
|
+// throw new Exception("无效的括号");
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// } else {
|
|
|
|
+// symbolStack.push(temSymbol);
|
|
|
|
+// }
|
|
|
|
+// //#endregion
|
|
|
|
+// }
|
|
|
|
+// } else {
|
|
|
|
+// if (!ifFindEndingMiddleKuoHaoStrs) {
|
|
|
|
+// valueNode temNode = new valueNode();
|
|
|
|
+// temNode.value = strTem;
|
|
|
|
+//
|
|
|
|
+// valueStack.push(temNode);
|
|
|
|
+// } else {
|
|
|
|
+// middleKuoHaoStrs.add(strTem);
|
|
|
|
+// }
|
|
|
|
+// }
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// while (symbolStack.size() > 0) {
|
|
|
|
+// Symbol temSymbol = symbolStack.pop();
|
|
|
|
+//
|
|
|
|
+// if (temSymbol instanceof operate) {
|
|
|
|
+// operateNode temNode = new operateNode();
|
|
|
|
+// temNode.operate = (operate) temSymbol;
|
|
|
|
+//
|
|
|
|
+// if (((operate) temSymbol).operateValue == 1) {
|
|
|
|
+// temNode.Right = valueStack.pop();
|
|
|
|
+// } else {
|
|
|
|
+// temNode.Right = valueStack.pop();
|
|
|
|
+// temNode.Left = valueStack.pop();
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// valueStack.push(temNode);
|
|
|
|
+//
|
|
|
|
+// } else {
|
|
|
|
+// throw new Exception("无效的括号!");
|
|
|
|
+// }
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// if (valueStack.size() == 1) {
|
|
|
|
+// return valueStack.pop();
|
|
|
|
+// } else {
|
|
|
|
+//
|
|
|
|
+// if (valueStack.size() > 1) {
|
|
|
|
+// List<treeNode> lstValues = new ArrayList<treeNode>();
|
|
|
|
+//
|
|
|
|
+// while (valueStack.size() > 0) {
|
|
|
|
+// treeNode temNode = valueStack.pop();
|
|
|
|
+//
|
|
|
|
+// if (temNode instanceof valueNode) {
|
|
|
|
+// lstValues.add(temNode);
|
|
|
|
+// } else {
|
|
|
|
+// throw new Exception("无效的检索式!");
|
|
|
|
+// }
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// treeNode retNode = null;
|
|
|
|
+//
|
|
|
|
+// for (treeNode temNode : lstValues) {
|
|
|
|
+// if (retNode == null) {
|
|
|
|
+// retNode = temNode;
|
|
|
|
+// } else {
|
|
|
|
+// operateNode sNode = new operateNode();
|
|
|
|
+//
|
|
|
|
+// if (!isAnd) {
|
|
|
|
+// sNode.operate = (operate) expressManager.getInstance().getSymbol("OR");
|
|
|
|
+// } else {
|
|
|
|
+// sNode.operate = (operate) expressManager.getInstance().getSymbol("AND");
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// sNode.Left = retNode;
|
|
|
|
+// sNode.Right = temNode;
|
|
|
|
+// retNode = sNode;
|
|
|
|
+// }
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// return retNode;
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// throw new Exception("无效的检索式!");
|
|
|
|
+//
|
|
|
|
+// }
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -336,11 +340,14 @@ public class expressManager {
|
|
|
|
|
|
String strTemToken = "";
|
|
String strTemToken = "";
|
|
Boolean isFindingEndYinHao = false;
|
|
Boolean isFindingEndYinHao = false;
|
|
|
|
+ Boolean ifFindingEndMiddleKuoHao = false;
|
|
int step = -1;
|
|
int step = -1;
|
|
for (int i = 0; i < strTem.length(); i++) {
|
|
for (int i = 0; i < strTem.length(); i++) {
|
|
char c = strTem.charAt(i);
|
|
char c = strTem.charAt(i);
|
|
|
|
|
|
switch (c) {
|
|
switch (c) {
|
|
|
|
+ case '“':
|
|
|
|
+ case '”':
|
|
case '"':
|
|
case '"':
|
|
if (!isFindingEndYinHao) {
|
|
if (!isFindingEndYinHao) {
|
|
isFindingEndYinHao = true;
|
|
isFindingEndYinHao = true;
|
|
@@ -357,6 +364,7 @@ public class expressManager {
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
|
|
+
|
|
break;
|
|
break;
|
|
case ' ':
|
|
case ' ':
|
|
if (!isFindingEndYinHao) {
|
|
if (!isFindingEndYinHao) {
|
|
@@ -372,33 +380,46 @@ public class expressManager {
|
|
break;
|
|
break;
|
|
case '(':
|
|
case '(':
|
|
case '[':
|
|
case '[':
|
|
- if (i == 0 || strTem.charAt(i - 1) == ' ' || (Tokens.size() > 0 && Tokens.get(Tokens.size() - 1) == String.valueOf(c)) || strTem.charAt(i - 1) == '=') {
|
|
|
|
- Tokens.add(String.valueOf(c));
|
|
|
|
- step = i;
|
|
|
|
|
|
+ if (!isFindingEndYinHao) {
|
|
|
|
+ if (step == (i - 1)) {
|
|
|
|
+ Tokens.add(String.valueOf(c));
|
|
|
|
+ step = i;
|
|
|
|
+ } else {
|
|
|
|
+ if (i == 0 || strTem.charAt(i - 1) == ' ' || (Tokens.size() > 0 && Tokens.get(Tokens.size() - 1) == String.valueOf(c)) || strTem.charAt(i - 1) == '=') {
|
|
|
|
+ Tokens.add(String.valueOf(c));
|
|
|
|
+ step = i;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|
|
break;
|
|
break;
|
|
case ')':
|
|
case ')':
|
|
case ']':
|
|
case ']':
|
|
- if ((i < strTem.length() - 1 && (strTem.charAt(i + 1) == ' ' || strTem.charAt(i + 1) == c)) || i == strTem.length() - 1) {
|
|
|
|
- Boolean isAdd = false;
|
|
|
|
- for (int index = Tokens.size() - 1; index >= 0; index--) {
|
|
|
|
- if ((c == ')' && Tokens.get(index).equals("(")) || (c == ']' && Tokens.get(index).equals("["))) {
|
|
|
|
- isAdd = true;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- if (isAdd) {
|
|
|
|
- strTemToken = strTem.substring(step + 1, i);
|
|
|
|
- if (strTemToken != null && !strTemToken.equals("")) {
|
|
|
|
- Tokens.add(strTemToken);
|
|
|
|
- }
|
|
|
|
|
|
+ if (!isFindingEndYinHao) {
|
|
|
|
+ if (step == (i - 1)) {
|
|
Tokens.add(String.valueOf(c));
|
|
Tokens.add(String.valueOf(c));
|
|
step = i;
|
|
step = i;
|
|
|
|
+ } else {
|
|
|
|
+ if ((i < strTem.length() - 1 && (strTem.charAt(i + 1) == ' ' || strTem.charAt(i + 1) == c)) || i == strTem.length() - 1) {
|
|
|
|
+ Boolean isAdd = false;
|
|
|
|
+ for (int index = Tokens.size() - 1; index >= 0; index--) {
|
|
|
|
+ if ((c == ')' && Tokens.get(index).equals("(")) || (c == ']' && Tokens.get(index).equals("["))) {
|
|
|
|
+ isAdd = true;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (isAdd) {
|
|
|
|
+ strTemToken = strTem.substring(step + 1, i);
|
|
|
|
+ if (strTemToken != null && !strTemToken.equals("")) {
|
|
|
|
+ Tokens.add(strTemToken);
|
|
|
|
+ }
|
|
|
|
+ Tokens.add(String.valueOf(c));
|
|
|
|
+ step = i;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
break;
|
|
case '=':
|
|
case '=':
|
|
- case '~':
|
|
|
|
case '>':
|
|
case '>':
|
|
case '>':
|
|
case '>':
|
|
case '<':
|
|
case '<':
|
|
@@ -430,4 +451,5 @@ public class expressManager {
|
|
return null;
|
|
return null;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
}
|
|
}
|