Skip to content

Commit 87c61d3

Browse files
committed
提交修改
1 parent 2cf19ba commit 87c61d3

33 files changed

+18775
-19172
lines changed

csharp/ToolGood.Algorithm2.MathParserReplace/Program.cs

Lines changed: 36 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -13,42 +13,43 @@ static void Main(string[] args)
1313
var str = @"T__0=1, T__1=2, T__2=3, T__3=4, T__4=5, T__5=6, T__6=7, T__7=8, T__8=9,
1414
T__9=10, T__10=11, T__11=12, T__12=13, T__13=14, T__14=15, T__15=16, T__16=17,
1515
T__17=18, T__18=19, T__19=20, T__20=21, T__21=22, T__22=23, T__23=24,
16-
T__24=25, SUB=26, NUM=27, STRING=28, NULL=29, IF=30, IFERROR=31, ISNUMBER=32,
17-
ISTEXT=33, ISERROR=34, ISNONTEXT=35, ISLOGICAL=36, ISEVEN=37, ISODD=38,
18-
ISNULL=39, ISNULLORERROR=40, AND=41, OR=42, NOT=43, TRUE=44, FALSE=45,
19-
E=46, PI=47, DEC2BIN=48, DEC2HEX=49, DEC2OCT=50, HEX2BIN=51, HEX2DEC=52,
20-
HEX2OCT=53, OCT2BIN=54, OCT2DEC=55, OCT2HEX=56, BIN2OCT=57, BIN2DEC=58,
21-
BIN2HEX=59, ABS=60, QUOTIENT=61, MOD=62, SIGN=63, SQRT=64, TRUNC=65, INT=66,
22-
GCD=67, LCM=68, COMBIN=69, PERMUT=70, DEGREES=71, RADIANS=72, COS=73,
23-
COSH=74, SIN=75, SINH=76, TAN=77, TANH=78, ACOS=79, ACOSH=80, ASIN=81,
24-
ASINH=82, ATAN=83, ATANH=84, ATAN2=85, ROUND=86, ROUNDDOWN=87, ROUNDUP=88,
25-
CEILING=89, FLOOR=90, EVEN=91, ODD=92, MROUND=93, RAND=94, RANDBETWEEN=95,
26-
FACT=96, FACTDOUBLE=97, POWER=98, EXP=99, LN=100, LOG=101, LOG10=102,
27-
MULTINOMIAL=103, PRODUCT=104, SQRTPI=105, SUMSQ=106, ASC=107, JIS=108,
28-
CHAR=109, CLEAN=110, CODE=111, CONCATENATE=112, EXACT=113, FIND=114, FIXED=115,
29-
LEFT=116, LEN=117, LOWER=118, MID=119, PROPER=120, REPLACE=121, REPT=122,
30-
RIGHT=123, RMB=124, SEARCH=125, SUBSTITUTE=126, T=127, TEXT=128, TRIM=129,
31-
UPPER=130, VALUE=131, DATEVALUE=132, TIMEVALUE=133, DATE=134, TIME=135,
32-
NOW=136, TODAY=137, YEAR=138, MONTH=139, DAY=140, HOUR=141, MINUTE=142,
33-
SECOND=143, WEEKDAY=144, DATEDIF=145, DAYS360=146, EDATE=147, EOMONTH=148,
34-
NETWORKDAYS=149, WORKDAY=150, WEEKNUM=151, MAX=152, MEDIAN=153, MIN=154,
35-
QUARTILE=155, MODE=156, LARGE=157, SMALL=158, PERCENTILE=159, PERCENTRANK=160,
36-
AVERAGE=161, AVERAGEIF=162, GEOMEAN=163, HARMEAN=164, COUNT=165, COUNTIF=166,
37-
SUM=167, SUMIF=168, AVEDEV=169, STDEV=170, STDEVP=171, DEVSQ=172, VAR=173,
38-
VARP=174, NORMDIST=175, NORMINV=176, NORMSDIST=177, NORMSINV=178, BETADIST=179,
39-
BETAINV=180, BINOMDIST=181, EXPONDIST=182, FDIST=183, FINV=184, FISHER=185,
40-
FISHERINV=186, GAMMADIST=187, GAMMAINV=188, GAMMALN=189, HYPGEOMDIST=190,
41-
LOGINV=191, LOGNORMDIST=192, NEGBINOMDIST=193, POISSON=194, TDIST=195,
42-
TINV=196, WEIBULL=197, URLENCODE=198, URLDECODE=199, HTMLENCODE=200, HTMLDECODE=201,
43-
BASE64TOTEXT=202, BASE64URLTOTEXT=203, TEXTTOBASE64=204, TEXTTOBASE64URL=205,
44-
REGEX=206, REGEXREPALCE=207, ISREGEX=208, GUID=209, MD5=210, SHA1=211,
45-
SHA256=212, SHA512=213, CRC32=214, HMACMD5=215, HMACSHA1=216, HMACSHA256=217,
46-
HMACSHA512=218, TRIMSTART=219, TRIMEND=220, INDEXOF=221, LASTINDEXOF=222,
47-
SPLIT=223, JOIN=224, SUBSTRING=225, STARTSWITH=226, ENDSWITH=227, ISNULLOREMPTY=228,
48-
ISNULLORWHITESPACE=229, REMOVESTART=230, REMOVEEND=231, JSON=232, VLOOKUP=233,
49-
LOOKUP=234, ARRAY=235, PARAMETER=236, PARAMETER2=237, WS=238;
16+
T__24=25, T__25=26, SUB=27, NUM=28, STRING=29, NULL=30, IF=31, IFERROR=32,
17+
ISNUMBER=33, ISTEXT=34, ISERROR=35, ISNONTEXT=36, ISLOGICAL=37, ISEVEN=38,
18+
ISODD=39, ISNULL=40, ISNULLORERROR=41, AND=42, OR=43, NOT=44, TRUE=45,
19+
FALSE=46, E=47, PI=48, DEC2BIN=49, DEC2HEX=50, DEC2OCT=51, HEX2BIN=52,
20+
HEX2DEC=53, HEX2OCT=54, OCT2BIN=55, OCT2DEC=56, OCT2HEX=57, BIN2OCT=58,
21+
BIN2DEC=59, BIN2HEX=60, ABS=61, QUOTIENT=62, MOD=63, SIGN=64, SQRT=65,
22+
TRUNC=66, INT=67, GCD=68, LCM=69, COMBIN=70, PERMUT=71, DEGREES=72, RADIANS=73,
23+
COS=74, COSH=75, SIN=76, SINH=77, TAN=78, TANH=79, ACOS=80, ACOSH=81,
24+
ASIN=82, ASINH=83, ATAN=84, ATANH=85, ATAN2=86, ROUND=87, ROUNDDOWN=88,
25+
ROUNDUP=89, CEILING=90, FLOOR=91, EVEN=92, ODD=93, MROUND=94, RAND=95,
26+
RANDBETWEEN=96, FACT=97, FACTDOUBLE=98, POWER=99, EXP=100, LN=101, LOG=102,
27+
LOG10=103, MULTINOMIAL=104, PRODUCT=105, SQRTPI=106, SUMSQ=107, ASC=108,
28+
JIS=109, CHAR=110, CLEAN=111, CODE=112, CONCATENATE=113, EXACT=114, FIND=115,
29+
FIXED=116, LEFT=117, LEN=118, LOWER=119, MID=120, PROPER=121, REPLACE=122,
30+
REPT=123, RIGHT=124, RMB=125, SEARCH=126, SUBSTITUTE=127, T=128, TEXT=129,
31+
TRIM=130, UPPER=131, VALUE=132, DATEVALUE=133, TIMEVALUE=134, DATE=135,
32+
TIME=136, NOW=137, TODAY=138, YEAR=139, MONTH=140, DAY=141, HOUR=142,
33+
MINUTE=143, SECOND=144, WEEKDAY=145, DATEDIF=146, DAYS360=147, EDATE=148,
34+
EOMONTH=149, NETWORKDAYS=150, WORKDAY=151, WEEKNUM=152, MAX=153, MEDIAN=154,
35+
MIN=155, QUARTILE=156, MODE=157, LARGE=158, SMALL=159, PERCENTILE=160,
36+
PERCENTRANK=161, AVERAGE=162, AVERAGEIF=163, GEOMEAN=164, HARMEAN=165,
37+
COUNT=166, COUNTIF=167, SUM=168, SUMIF=169, AVEDEV=170, STDEV=171, STDEVP=172,
38+
DEVSQ=173, VAR=174, VARP=175, NORMDIST=176, NORMINV=177, NORMSDIST=178,
39+
NORMSINV=179, BETADIST=180, BETAINV=181, BINOMDIST=182, EXPONDIST=183,
40+
FDIST=184, FINV=185, FISHER=186, FISHERINV=187, GAMMADIST=188, GAMMAINV=189,
41+
GAMMALN=190, HYPGEOMDIST=191, LOGINV=192, LOGNORMDIST=193, NEGBINOMDIST=194,
42+
POISSON=195, TDIST=196, TINV=197, WEIBULL=198, URLENCODE=199, URLDECODE=200,
43+
HTMLENCODE=201, HTMLDECODE=202, BASE64TOTEXT=203, BASE64URLTOTEXT=204,
44+
TEXTTOBASE64=205, TEXTTOBASE64URL=206, REGEX=207, REGEXREPALCE=208, ISREGEX=209,
45+
GUID=210, MD5=211, SHA1=212, SHA256=213, SHA512=214, CRC32=215, HMACMD5=216,
46+
HMACSHA1=217, HMACSHA256=218, HMACSHA512=219, TRIMSTART=220, TRIMEND=221,
47+
INDEXOF=222, LASTINDEXOF=223, SPLIT=224, JOIN=225, SUBSTRING=226, STARTSWITH=227,
48+
ENDSWITH=228, ISNULLOREMPTY=229, ISNULLORWHITESPACE=230, REMOVESTART=231,
49+
REMOVEEND=232, JSON=233, VLOOKUP=234, LOOKUP=235, ARRAY=236, PARAMETER=237,
50+
PARAMETER2=238, WS=239, COMMENT=240, LINE_COMMENT=241;
5051
51-
RULE_prog=0, RULE_expr=1, RULE_expr2=2, RULE_parameter2=3;
52+
RULE_prog=0, RULE_expr=1, RULE_expr2=2, RULE_parameter2=2;
5253
";
5354
var array = str.Split(" ,\r\n\t;".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
5455
Dictionary<string, string> dict = new Dictionary<string, string>();

csharp/ToolGood.Algorithm2.Test/AlgorithmEngine/AlgorithmEngineTest.cs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,42 @@ public void base_test2()
179179

180180
}
181181

182+
[Test]
183+
public void base_test3()
184+
{
185+
AlgorithmEngine engine = new AlgorithmEngine();
186+
187+
var c = engine.TryEvaluate("(2)+/*123456*/3", 0);
188+
Assert.AreEqual(5, c);
189+
190+
c = engine.TryEvaluate("2+3//eee", 0);
191+
Assert.AreEqual(5, c);
192+
193+
c = engine.TryEvaluate("(2)+/*123456*/3 ee22+22", 0);
194+
Assert.AreEqual(0, c);
195+
}
196+
197+
[Test]
198+
public void base_test4()
199+
{
200+
AlgorithmEngine engine = new AlgorithmEngine();
201+
202+
String c = engine.TryEvaluate("'4dd'&'55' rr", "");
203+
Assert.AreEqual("", c);
204+
205+
}
206+
207+
[Test]
208+
public void base_test5()
209+
{
210+
AlgorithmEngine engine = new AlgorithmEngine();
211+
212+
String c = engine.TryEvaluate("'4dd'&'55'.left(1)", "");
213+
Assert.AreEqual("4dd5", c);
214+
215+
}
216+
217+
182218
[Test]
183219
public void Cylinder_Test()
184220
{

csharp/ToolGood.Algorithm2.Test/Program.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,16 @@ class Program
1111
static void Main(string[] args)
1212
{
1313
AlgorithmEngine engine = new AlgorithmEngine();
14+
15+
16+
17+
1418
double a = 0.0;
1519
if (engine.Parse("1+2")) {
1620
var o = engine.Evaluate();
1721
a = o.NumberValue;
1822
}
23+
1924
var b = engine.TryEvaluate("1=1 && 1<2 and 7-8>1", 0);// Support(支持) && || and or
2025
var c = engine.TryEvaluate("2+3", 0);
2126
var d = engine.TryEvaluate("count(array(1,2,3,4))", 0);//{} represents array, return: 4 {}代表数组,返回:4
@@ -27,7 +32,7 @@ static void Main(string[] args)
2732
var k = engine.TryEvaluate("json('{\"Name\":\"William Shakespeare \",\"Age\":51,\"Birthday\":\"04/26/1564 00:00:00\"}')[Name].Trim()", null);//Return to "William Shakespeare" 返回"William Shakespeare" (不带空格)
2833
var l = engine.TryEvaluate("json('{\"Name1\":\"William Shakespeare \",\"Age\":51,\"Birthday\":\"04/26/1564 00:00:00\"}')['Name'& 1].Trim().substring(2,3)", null); ;//Return "ill" 返回"ill"
2934

30-
35+
3136

3237
Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR");
3338
Thread.CurrentThread.CurrentUICulture = new CultureInfo("fr-FR");

csharp/ToolGood.Algorithm2/AlgorithmEngine.cs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -321,12 +321,6 @@ public bool Parse(string exp)
321321
parser.AddErrorListener(antlrErrorListener);
322322

323323
var context = parser.prog();
324-
var end = context.Stop.StopIndex;
325-
if (end + 1 < exp.Length) {
326-
_context = null;
327-
LastError = "Parameter exp invalid !";
328-
return false;
329-
}
330324
if (antlrErrorListener.IsError) {
331325
_context = null;
332326
LastError = antlrErrorListener.ErrorMsg;

csharp/ToolGood.Algorithm2/AlgorithmEngineEx.cs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -801,12 +801,6 @@ private ProgContext Parse(string exp)
801801
parser.AddErrorListener(antlrErrorListener);
802802

803803
var context = parser.prog();
804-
var end = context.Stop.StopIndex;
805-
if (end + 1 < exp.Length) {
806-
807-
LastError = "Parameter exp invalid !";
808-
return null;
809-
}
810804
if (antlrErrorListener.IsError) {
811805
LastError = antlrErrorListener.ErrorMsg;
812806
return null;

csharp/ToolGood.Algorithm2/AlgorithmEngineHelper.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using Antlr4.Runtime;
22
using System;
33
using System.Collections.Generic;
4+
using System.Linq;
45
using ToolGood.Algorithm.Internals;
56

67
namespace ToolGood.Algorithm
@@ -265,10 +266,6 @@ public DiyNameInfo GetDiyNames(String exp)
265266
parser.AddErrorListener(antlrErrorListener);
266267

267268
var context = parser.prog();
268-
var end = context.Stop.StopIndex;
269-
if (end + 1 < exp.Length) {
270-
throw new Exception("Parameter exp invalid !");
271-
}
272269
if (antlrErrorListener.IsError) {
273270
throw new Exception(antlrErrorListener.ErrorMsg);
274271
}

csharp/ToolGood.Algorithm2/ConditionCache.cs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using Antlr4.Runtime;
22
using System;
33
using System.Collections.Generic;
4+
using System.Linq;
45
using ToolGood.Algorithm.Internals;
56
using static mathParser;
67

@@ -130,11 +131,6 @@ private ProgContext Parse(string exp)
130131
parser.AddErrorListener(antlrErrorListener);
131132

132133
var context = parser.prog();
133-
var end = context.Stop.StopIndex;
134-
if (end + 1 < exp.Length) {
135-
LastError = "Parameter exp invalid !";
136-
return null;
137-
}
138134
if (antlrErrorListener.IsError) {
139135
LastError = antlrErrorListener.ErrorMsg;
140136
return null;

csharp/ToolGood.Algorithm2/Internals/ConditionCacheInfo.cs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using Antlr4.Runtime;
22
using System;
3+
using System.Linq;
34
using static mathParser;
45

56
namespace ToolGood.Algorithm.Internals
@@ -51,12 +52,6 @@ private ProgContext Parse(string exp)
5152
parser.AddErrorListener(antlrErrorListener);
5253

5354
var context = parser.prog();
54-
var end = context.Stop.StopIndex;
55-
if (end + 1 < exp.Length) {
56-
57-
LastError = "Parameter exp invalid !";
58-
return null;
59-
}
6055
if (antlrErrorListener.IsError) {
6156
LastError = antlrErrorListener.ErrorMsg;
6257
return null;

csharp/ToolGood.Algorithm2/Internals/DiyNameVisitor.cs

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
using Antlr4.Runtime.Tree;
22
using System;
3-
using System.Collections.Generic;
4-
using System.Linq;
5-
using System.Text;
63

74
namespace ToolGood.Algorithm.Internals
85
{
@@ -752,10 +749,6 @@ public object VisitOR_fun(mathParser.OR_funContext context)
752749
return VisitChildren(context);
753750
}
754751

755-
public object VisitParameter(mathParser.ParameterContext context)
756-
{
757-
return VisitChildren(context);
758-
}
759752

760753
public object VisitParameter2(mathParser.Parameter2Context context)
761754
{

csharp/ToolGood.Algorithm2/Internals/MathVisitor.cs

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,19 @@
1-
using System;
1+
using Antlr4.Runtime.Tree;
2+
using System;
23
using System.Collections.Generic;
34
using System.Globalization;
45
using System.Linq;
56
using System.Text;
67
using System.Text.RegularExpressions;
78
using System.Web;
8-
using Antlr4.Runtime.Tree;
9-
using ToolGood.Algorithm.Internals;
109
using ToolGood.Algorithm.LitJson;
1110
using ToolGood.Algorithm.MathNet.Numerics;
1211

1312
namespace ToolGood.Algorithm.Internals
1413
{
1514
class MathVisitor : AbstractParseTreeVisitor<Operand>, ImathVisitor<Operand>
1615
{
17-
private static readonly Regex sumifRegex = new Regex(@"(<|<=|>|>=|=|==|!=|<>) *([-+]?\d+(\.(\d+)?)?)", RegexOptions.Compiled);
16+
private static readonly Regex sumifRegex = new Regex(@"(<|<=|>|>=|=|==|===|!=|!==|<>) *([-+]?\d+(\.(\d+)?)?)", RegexOptions.Compiled);
1817
private static readonly Regex bit_2 = new Regex("^[01]+$", RegexOptions.IgnoreCase | RegexOptions.Compiled);
1918
private static readonly Regex bit_8 = new Regex("^[0-8]+$", RegexOptions.IgnoreCase | RegexOptions.Compiled);
2019
private static readonly Regex bit_16 = new Regex("^[0-9a-f]+$", RegexOptions.IgnoreCase | RegexOptions.Compiled);
@@ -29,7 +28,7 @@ class MathVisitor : AbstractParseTreeVisitor<Operand>, ImathVisitor<Operand>
2928

3029
public Operand VisitProg(mathParser.ProgContext context)
3130
{
32-
return VisitChildren(context);
31+
return Visit(context.expr());
3332
}
3433

3534
public Operand VisitMulDiv_fun(mathParser.MulDiv_funContext context)
@@ -206,7 +205,7 @@ public Operand VisitJudge_fun(mathParser.Judge_funContext context)
206205
if (firstValue.IsNull) {
207206
if (secondValue.IsNull && CharUtil.Equals(type, "=", "==", "===")) {
208207
return Operand.True;
209-
} else if (secondValue.IsNull == false && CharUtil.Equals(type, "<>", "!=")) {
208+
} else if (secondValue.IsNull == false && CharUtil.Equals(type, "<>", "!=","!==")) {
210209
return Operand.True;
211210
}
212211
return Operand.False;
@@ -3825,14 +3824,6 @@ public Operand VisitPARAMETER_fun(mathParser.PARAMETER_funContext context)
38253824
return Operand.Error("Function PARAMETER first parameter is error!");
38263825
}
38273826

3828-
public Operand VisitParameter(mathParser.ParameterContext context)
3829-
{
3830-
var expr = context.expr();
3831-
if (expr != null) {
3832-
return this.Visit(expr);
3833-
}
3834-
return this.Visit(context.parameter2());
3835-
}
38363827

38373828
public Operand VisitParameter2(mathParser.Parameter2Context context)
38383829
{

0 commit comments

Comments
 (0)