Skip to content

Commit fb5555d

Browse files
committed
添加 新方法
1 parent da03d8b commit fb5555d

File tree

8 files changed

+1773
-44
lines changed

8 files changed

+1773
-44
lines changed
Lines changed: 281 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,281 @@
1+
package toolgood.algorithm;
2+
3+
import java.util.HashSet;
4+
import java.util.Set;
5+
6+
import org.antlr.v4.runtime.CharStreams;
7+
import org.antlr.v4.runtime.CommonTokenStream;
8+
9+
import toolgood.algorithm.internals.AntlrCharStream;
10+
import toolgood.algorithm.internals.AntlrErrorListener;
11+
import toolgood.algorithm.internals.CharUtil;
12+
import toolgood.algorithm.internals.DiyNameVisitor;
13+
import toolgood.algorithm.math.mathLexer;
14+
import toolgood.algorithm.math.mathParser;
15+
import toolgood.algorithm.math.mathParser2.ProgContext;
16+
17+
/**
18+
* 算法引擎助手
19+
*/
20+
public class AlgorithmEngineHelper {
21+
22+
private static Set<String> _lexerSet;
23+
24+
private static Set<String> GetLexerSet() {
25+
if (_lexerSet == null) {
26+
Set<String> lexerSet = new HashSet<String>();
27+
lexerSet.add("NULL");
28+
lexerSet.add("IF");
29+
lexerSet.add("IFERROR");
30+
lexerSet.add("ISNUMBER");
31+
lexerSet.add("ISTEXT");
32+
lexerSet.add("ISERROR");
33+
lexerSet.add("ISNONTEXT");
34+
lexerSet.add("ISLOGICAL");
35+
lexerSet.add("ISEVEN");
36+
lexerSet.add("ISODD");
37+
lexerSet.add("ISNULL");
38+
lexerSet.add("ISNULLORERROR");
39+
lexerSet.add("AND");
40+
lexerSet.add("OR");
41+
lexerSet.add("NOT");
42+
lexerSet.add("TRUE");
43+
lexerSet.add("FALSE");
44+
lexerSet.add("E");
45+
lexerSet.add("PI");
46+
lexerSet.add("DEC2BIN");
47+
lexerSet.add("DEC2HEX");
48+
lexerSet.add("DEC2OCT");
49+
lexerSet.add("HEX2BIN");
50+
lexerSet.add("HEX2DEC");
51+
lexerSet.add("HEX2OCT");
52+
lexerSet.add("OCT2BIN");
53+
lexerSet.add("OCT2DEC");
54+
lexerSet.add("OCT2HEX");
55+
lexerSet.add("BIN2OCT");
56+
lexerSet.add("BIN2DEC");
57+
lexerSet.add("BIN2HEX");
58+
lexerSet.add("ABS");
59+
lexerSet.add("QUOTIENT");
60+
lexerSet.add("MOD");
61+
lexerSet.add("SIGN");
62+
lexerSet.add("SQRT");
63+
lexerSet.add("TRUNC");
64+
lexerSet.add("INT");
65+
lexerSet.add("GCD");
66+
lexerSet.add("LCM");
67+
lexerSet.add("COMBIN");
68+
lexerSet.add("PERMUT");
69+
lexerSet.add("DEGREES");
70+
lexerSet.add("RADIANS");
71+
lexerSet.add("COS");
72+
lexerSet.add("COSH");
73+
lexerSet.add("SIN");
74+
lexerSet.add("SINH");
75+
lexerSet.add("TAN");
76+
lexerSet.add("TANH");
77+
lexerSet.add("ACOS");
78+
lexerSet.add("ACOSH");
79+
lexerSet.add("ASIN");
80+
lexerSet.add("ASINH");
81+
lexerSet.add("ATAN");
82+
lexerSet.add("ATANH");
83+
lexerSet.add("ATAN2");
84+
lexerSet.add("ROUND");
85+
lexerSet.add("ROUNDDOWN");
86+
lexerSet.add("ROUNDUP");
87+
lexerSet.add("CEILING");
88+
lexerSet.add("FLOOR");
89+
lexerSet.add("EVEN");
90+
lexerSet.add("ODD");
91+
lexerSet.add("MROUND");
92+
lexerSet.add("RAND");
93+
lexerSet.add("RANDBETWEEN");
94+
lexerSet.add("FACT");
95+
lexerSet.add("FACTDOUBLE");
96+
lexerSet.add("POWER");
97+
lexerSet.add("EXP");
98+
lexerSet.add("LN");
99+
lexerSet.add("LOG");
100+
lexerSet.add("LOG10");
101+
lexerSet.add("MULTINOMIAL");
102+
lexerSet.add("PRODUCT");
103+
lexerSet.add("SQRTPI");
104+
lexerSet.add("SUMSQ");
105+
lexerSet.add("ASC");
106+
lexerSet.add("JIS");
107+
lexerSet.add("WIDECHAR");
108+
lexerSet.add("CHAR");
109+
lexerSet.add("CLEAN");
110+
lexerSet.add("CODE");
111+
lexerSet.add("CONCATENATE");
112+
lexerSet.add("EXACT");
113+
lexerSet.add("FIND");
114+
lexerSet.add("FIXED");
115+
lexerSet.add("LEFT");
116+
lexerSet.add("LEN");
117+
lexerSet.add("LOWER");
118+
lexerSet.add("TOLOWER");
119+
lexerSet.add("MID");
120+
lexerSet.add("PROPER");
121+
lexerSet.add("REPLACE");
122+
lexerSet.add("REPT");
123+
lexerSet.add("RIGHT");
124+
lexerSet.add("RMB");
125+
lexerSet.add("SEARCH");
126+
lexerSet.add("SUBSTITUTE");
127+
lexerSet.add("T");
128+
lexerSet.add("TEXT");
129+
lexerSet.add("TRIM");
130+
lexerSet.add("UPPER");
131+
lexerSet.add("TOUPPER");
132+
lexerSet.add("VALUE");
133+
lexerSet.add("DATEVALUE");
134+
lexerSet.add("TIMEVALUE");
135+
lexerSet.add("DATE");
136+
lexerSet.add("TIME");
137+
lexerSet.add("NOW");
138+
lexerSet.add("TODAY");
139+
lexerSet.add("YEAR");
140+
lexerSet.add("MONTH");
141+
lexerSet.add("DAY");
142+
lexerSet.add("HOUR");
143+
lexerSet.add("MINUTE");
144+
lexerSet.add("SECOND");
145+
lexerSet.add("WEEKDAY");
146+
lexerSet.add("DATEDIF");
147+
lexerSet.add("DAYS360");
148+
lexerSet.add("EDATE");
149+
lexerSet.add("EOMONTH");
150+
lexerSet.add("NETWORKDAYS");
151+
lexerSet.add("WORKDAY");
152+
lexerSet.add("WEEKNUM");
153+
lexerSet.add("MAX");
154+
lexerSet.add("MEDIAN");
155+
lexerSet.add("MIN");
156+
lexerSet.add("QUARTILE");
157+
lexerSet.add("MODE");
158+
lexerSet.add("LARGE");
159+
lexerSet.add("SMALL");
160+
lexerSet.add("PERCENTILE");
161+
lexerSet.add("PERCENTRANK");
162+
lexerSet.add("AVERAGE");
163+
lexerSet.add("AVERAGEIF");
164+
lexerSet.add("GEOMEAN");
165+
lexerSet.add("HARMEAN");
166+
lexerSet.add("COUNT");
167+
lexerSet.add("COUNTIF");
168+
lexerSet.add("SUM");
169+
lexerSet.add("SUMIF");
170+
lexerSet.add("AVEDEV");
171+
lexerSet.add("STDEV");
172+
lexerSet.add("STDEVP");
173+
lexerSet.add("DEVSQ");
174+
lexerSet.add("VAR");
175+
lexerSet.add("VARP");
176+
lexerSet.add("NORMDIST");
177+
lexerSet.add("NORMINV");
178+
lexerSet.add("NORMSDIST");
179+
lexerSet.add("NORMSINV");
180+
lexerSet.add("BETADIST");
181+
lexerSet.add("BETAINV");
182+
lexerSet.add("BINOMDIST");
183+
lexerSet.add("EXPONDIST");
184+
lexerSet.add("FDIST");
185+
lexerSet.add("FINV");
186+
lexerSet.add("FISHER");
187+
lexerSet.add("FISHERINV");
188+
lexerSet.add("GAMMADIST");
189+
lexerSet.add("GAMMAINV");
190+
lexerSet.add("GAMMALN");
191+
lexerSet.add("HYPGEOMDIST");
192+
lexerSet.add("LOGINV");
193+
lexerSet.add("LOGNORMDIST");
194+
lexerSet.add("NEGBINOMDIST");
195+
lexerSet.add("POISSON");
196+
lexerSet.add("TDIST");
197+
lexerSet.add("TINV");
198+
lexerSet.add("WEIBULL");
199+
lexerSet.add("URLENCODE");
200+
lexerSet.add("URLDECODE");
201+
lexerSet.add("HTMLENCODE");
202+
lexerSet.add("HTMLDECODE");
203+
lexerSet.add("BASE64TOTEXT");
204+
lexerSet.add("BASE64URLTOTEXT");
205+
lexerSet.add("TEXTTOBASE64");
206+
lexerSet.add("TEXTTOBASE64URL");
207+
lexerSet.add("REGEX");
208+
lexerSet.add("REGEXREPALCE");
209+
lexerSet.add("ISREGEX");
210+
lexerSet.add("ISMATCH");
211+
lexerSet.add("GUID");
212+
lexerSet.add("MD5");
213+
lexerSet.add("SHA1");
214+
lexerSet.add("SHA256");
215+
lexerSet.add("SHA512");
216+
lexerSet.add("CRC32");
217+
lexerSet.add("HMACMD5");
218+
lexerSet.add("HMACSHA1");
219+
lexerSet.add("HMACSHA256");
220+
lexerSet.add("HMACSHA512");
221+
lexerSet.add("TRIMSTART");
222+
lexerSet.add("LTRIM");
223+
lexerSet.add("TRIMEND");
224+
lexerSet.add("RTRIM");
225+
lexerSet.add("INDEXOF");
226+
lexerSet.add("LASTINDEXOF");
227+
lexerSet.add("SPLIT");
228+
lexerSet.add("JOIN");
229+
lexerSet.add("SUBSTRING");
230+
lexerSet.add("STARTSWITH");
231+
lexerSet.add("ENDSWITH");
232+
lexerSet.add("ISNULLOREMPTY");
233+
lexerSet.add("ISNULLORWHITESPACE");
234+
lexerSet.add("REMOVESTART");
235+
lexerSet.add("REMOVEEND");
236+
lexerSet.add("JSON");
237+
lexerSet.add("VLOOKUP");
238+
lexerSet.add("LOOKUP");
239+
lexerSet.add("ARRAY");
240+
_lexerSet = lexerSet;
241+
}
242+
return _lexerSet;
243+
}
244+
245+
/// <summary>
246+
/// 是否与内置关键字相同
247+
/// </summary>
248+
/// <param name="parameter"></param>
249+
/// <returns></returns>
250+
public boolean IsKeywords(String parameter) {
251+
Set<String> lexerSet = GetLexerSet();
252+
return lexerSet.contains(CharUtil.StandardString(parameter));
253+
}
254+
255+
public DiyNameInfo GetDiyNames(String exp) throws Exception {
256+
if (exp == null || exp.equals("")) {
257+
throw new Exception("Parameter exp invalid !");
258+
}
259+
final AntlrCharStream stream = new AntlrCharStream(CharStreams.fromString(exp));
260+
final mathLexer lexer = new mathLexer(stream);
261+
final CommonTokenStream tokens = new CommonTokenStream(lexer);
262+
final mathParser parser = new mathParser(tokens);
263+
final AntlrErrorListener antlrErrorListener = new AntlrErrorListener();
264+
parser.removeErrorListeners();
265+
parser.addErrorListener(antlrErrorListener);
266+
final ProgContext context = parser.prog();
267+
268+
final int end = context.stop.getStopIndex();
269+
if (end + 1 < exp.length()) {
270+
throw new Exception("Parameter exp invalid !");
271+
}
272+
if (antlrErrorListener.IsError) {
273+
throw new Exception(antlrErrorListener.ErrorMsg);
274+
}
275+
276+
final DiyNameVisitor visitor = new DiyNameVisitor();
277+
visitor.visit(context);
278+
return visitor.diy;
279+
}
280+
281+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package toolgood.algorithm;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
6+
public class DiyNameInfo {
7+
public List<String> Parameters;
8+
9+
public List<String> Functions;
10+
11+
public DiyNameInfo(){
12+
Parameters=new ArrayList<>();
13+
Functions=new ArrayList<>();
14+
}
15+
16+
}

0 commit comments

Comments
 (0)